欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何利用@PreAuthorize注解自定義權(quán)限校驗(yàn)

 更新時(shí)間:2024年12月27日 09:36:09   作者:Slavic_  
通過(guò)使用@PreAuthorize注解實(shí)現(xiàn)開放接口的權(quán)限校驗(yàn),具體步驟包括開啟全局方法安全、編寫自定義鑒權(quán)方法、創(chuàng)建自定義異常類、在統(tǒng)一異常處理類中捕獲異常并處理,最后在需要鑒權(quán)的接口上貼上注解

利用@PreAuthorize注解自定義權(quán)限校驗(yàn)

使用場(chǎng)景

由于項(xiàng)目中,需要對(duì)外開放接口,要求做請(qǐng)求頭校驗(yàn),不做其他權(quán)限控制.所以準(zhǔn)備對(duì)開放的接口全部放行,不做登錄校驗(yàn).想到之前用這個(gè)注解來(lái)實(shí)現(xiàn)管理后臺(tái)的權(quán)限校驗(yàn),所以為了方便在需要對(duì)外開放的接口貼上注解即可.記錄一下實(shí)現(xiàn)過(guò)程.

1.開啟@EnableGlobalMethodSecurity(prePostEnabled = true)注解

在繼承 WebSecurityConfigurerAdapter 這個(gè)類的類上面貼上這個(gè)注解.并且prePostEnabled設(shè)置為true,@PreAuthorize這個(gè)注解才能生效,SpringSecurity默認(rèn)是關(guān)閉注解功能的。

@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter implements WebMvcConfigurer {....}

2.編寫自定義的鑒權(quán)方法

// service取名sc是方便注解調(diào)用
@Service("sc")
@Slf4j
public class SginCheckService {

    @Autowired
    private PlatformManageService platformManageService;

    public boolean checkSgin(){
        HttpServletRequest request = UserContextHolder.getHttpServletRequest();
        String appid = request.getHeader("appid");
        String signature = request.getHeader("signature");
        String timestamp = request.getHeader("timestamp");
        //非crm管理平臺(tái)
        PlatformManage platformManage = platformManageService.getOne(Wrappers.<PlatformManage>lambdaQuery().eq(PlatformManage::getSourcetype, appid));
        if (platformManage == null) {
            log.error("平臺(tái)不存在:" + appid);
             //鑒權(quán)失敗拋出自定義異常
            throw new SginCheckException();
        }
        //校驗(yàn)簽名
        String secretKey = platformManage.getPrivateKey();
        MD5 md5 = new MD5();
        String lowerCase = md5.getMD5ofStr(appid + secretKey + timestamp).toLowerCase();
        if (!lowerCase.equals(signature)) {
            log.error("簽名校驗(yàn)失敗:" + "crm:" + lowerCase + ",接口:" + signature);
            //鑒權(quán)失敗拋出自定義異常
            throw new SginCheckException();
        }
        //如果鑒權(quán)成功不return true 會(huì)報(bào)錯(cuò).
        return true;
    }
}

3.創(chuàng)建自定義異常類

public class SginCheckException extends BaseException {
    public SginCheckException() {
        super();
    }
    public SginCheckException(String message) {
        super(SystemErrorType.SIGNATURE_ERROR,message);
    }
}

4.在統(tǒng)一異常處理類里面捕獲異常類并做對(duì)應(yīng)處理

@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
	/**
     * 簽名失敗拋出異常處理
     *
     * @param e
     * @return
     */
    @ResponseBody
    @ResponseStatus(HttpStatus.UNAUTHORIZED)
    @ExceptionHandler(value = {SginCheckException.class})
    public Result sginCheckException(SginCheckException e) {
        return Result.fail(SystemErrorType.SIGNATURE_ERROR);
    }
}

5.最后就是在需要鑒權(quán)的接口上貼上注解

	// 調(diào)用方法語(yǔ)法  @beanname.methodname() 
 	@ApiOperation(value = "會(huì)員注冊(cè)", notes = "會(huì)員注冊(cè)", httpMethod = "POST")
    @PostMapping("/register")
    @PreAuthorize("@sc.checkSgin()")
    public Result register(@RequestBody @Valid MemberRegisterParam memberRegisterParam, HttpServletRequest request) {
        log.error("會(huì)員注冊(cè):" + memberRegisterParam);
        return memberService.register(memberRegisterParam, request);
    }

總結(jié)

當(dāng)然這個(gè)注解還有很多用法,我只是記錄一下我的使用方法。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java編程代碼性能優(yōu)化

    Java編程代碼性能優(yōu)化

    本文介紹了 Java 代碼優(yōu)化的過(guò)程,總結(jié)了優(yōu)化 Java 程序的一些最佳實(shí)踐,分析了進(jìn)行優(yōu)化的方法,并解釋了性能提升的原因,需要的朋友可以參考下
    2015-11-11
  • Java中HashMap集合的6種遍歷方式詳解

    Java中HashMap集合的6種遍歷方式詳解

    這篇文章主要介紹了Java中HashMap集合的6種遍歷方式詳解,HashMap?基于哈希表的?Map?接口實(shí)現(xiàn),是以?key-value?存儲(chǔ)形式存在,即主要用來(lái)存放鍵值對(duì),HashMap?的實(shí)現(xiàn)不是同步的,這意味著它不是線程安全的,我們來(lái)看一下其遍歷方式,需要的朋友可以參考下
    2023-12-12
  • 詳解JAVA中的for-each循環(huán)與迭代

    詳解JAVA中的for-each循環(huán)與迭代

    本文詳解了JAVA中的for-each循環(huán)與迭代,是JS入門學(xué)習(xí)中的基礎(chǔ)知識(shí),也是java中的難點(diǎn)知識(shí),需要的朋友可以參考下 。
    2016-10-10
  • 一個(gè)簡(jiǎn)單的Java音樂播放器

    一個(gè)簡(jiǎn)單的Java音樂播放器

    這篇文章主要為大家分享一個(gè)簡(jiǎn)單的Java音樂播放器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Java 內(nèi)存溢出的原因和解決方法

    Java 內(nèi)存溢出的原因和解決方法

    這篇文章主要介紹了Java 內(nèi)存溢出的原因和解決方法,幫助大家更好的維護(hù)Java程序,保持穩(wěn)定性,感興趣的朋友可以了解下
    2020-12-12
  • JAVA實(shí)現(xiàn)往字符串中某位置加入一個(gè)字符串

    JAVA實(shí)現(xiàn)往字符串中某位置加入一個(gè)字符串

    這篇文章主要介紹了JAVA實(shí)現(xiàn)往字符串中某位置加入一個(gè)字符串,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • Java 1.8使用數(shù)組實(shí)現(xiàn)循環(huán)隊(duì)列

    Java 1.8使用數(shù)組實(shí)現(xiàn)循環(huán)隊(duì)列

    這篇文章主要為大家詳細(xì)介紹了Java 1.8使用數(shù)組實(shí)現(xiàn)循環(huán)隊(duì)列,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • Java開啟JMX遠(yuǎn)程監(jiān)控服務(wù)配置

    Java開啟JMX遠(yuǎn)程監(jiān)控服務(wù)配置

    這篇文章主要為大家介紹了Java開啟JMX遠(yuǎn)程監(jiān)控的服務(wù)配置,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Java執(zhí)行可執(zhí)行文件的三種方法詳解

    Java執(zhí)行可執(zhí)行文件的三種方法詳解

    這篇文章主要為大家詳細(xì)介紹了Java中執(zhí)行可執(zhí)行文件的三種方法,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的小伙伴可以參考一下
    2024-02-02
  • springboot中如何判斷某個(gè)bean是否存在

    springboot中如何判斷某個(gè)bean是否存在

    這篇文章主要介紹了springboot中如何判斷某個(gè)bean是否存在,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03

最新評(píng)論