最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

使用場景

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

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

在繼承 WebSecurityConfigurerAdapter 這個類的類上面貼上這個注解.并且prePostEnabled設(shè)置為true,@PreAuthorize這個注解才能生效,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管理平臺
        PlatformManage platformManage = platformManageService.getOne(Wrappers.<PlatformManage>lambdaQuery().eq(PlatformManage::getSourcetype, appid));
        if (platformManage == null) {
            log.error("平臺不存在:" + appid);
             //鑒權(quán)失敗拋出自定義異常
            throw new SginCheckException();
        }
        //校驗簽名
        String secretKey = platformManage.getPrivateKey();
        MD5 md5 = new MD5();
        String lowerCase = md5.getMD5ofStr(appid + secretKey + timestamp).toLowerCase();
        if (!lowerCase.equals(signature)) {
            log.error("簽名校驗失敗:" + "crm:" + lowerCase + ",接口:" + signature);
            //鑒權(quán)失敗拋出自定義異常
            throw new SginCheckException();
        }
        //如果鑒權(quán)成功不return true 會報錯.
        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)一異常處理類里面捕獲異常類并做對應(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)用方法語法  @beanname.methodname() 
 	@ApiOperation(value = "會員注冊", notes = "會員注冊", httpMethod = "POST")
    @PostMapping("/register")
    @PreAuthorize("@sc.checkSgin()")
    public Result register(@RequestBody @Valid MemberRegisterParam memberRegisterParam, HttpServletRequest request) {
        log.error("會員注冊:" + memberRegisterParam);
        return memberService.register(memberRegisterParam, request);
    }

總結(jié)

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

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

相關(guān)文章

  • Java 實現(xiàn)瀏覽器下載文件及文件預(yù)覽

    Java 實現(xiàn)瀏覽器下載文件及文件預(yù)覽

    這篇文章主要介紹了Java 實現(xiàn)瀏覽器下載文件及文件預(yù)覽,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java并發(fā)編程this逃逸問題總結(jié)

    Java并發(fā)編程this逃逸問題總結(jié)

    本篇文章給大家詳細(xì)分析了Java并發(fā)編程this逃逸的問題分享,對此有需要的朋友參考下。
    2018-02-02
  • Python自定義計算時間過濾器實現(xiàn)過程解析

    Python自定義計算時間過濾器實現(xiàn)過程解析

    這篇文章主要介紹了Python自定義計算時間過濾器實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • Java 動態(tài)代理的多種實現(xiàn)方式

    Java 動態(tài)代理的多種實現(xiàn)方式

    動態(tài)代理實際上是JVM在運行期動態(tài)創(chuàng)建class字節(jié)碼并加載的過程。本文講述了Java 動態(tài)代理的多種實現(xiàn)方式,感興趣的朋友可以選擇適合自己的方式
    2021-06-06
  • SpringCloud之Feign遠(yuǎn)程接口映射的實現(xiàn)

    SpringCloud之Feign遠(yuǎn)程接口映射的實現(xiàn)

    這篇文章主要介紹了SpringCloud之Feign遠(yuǎn)程接口映射的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java線程創(chuàng)建的四種方式總結(jié)

    Java線程創(chuàng)建的四種方式總結(jié)

    這篇文章主要介紹了Java線程創(chuàng)建的四種方式,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • 使用Spring注入Hibernate驗證框架

    使用Spring注入Hibernate驗證框架

    這篇文章主要介紹了使用Spring注入Hibernate驗證框架方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java設(shè)計模式之模板方法詳解

    Java設(shè)計模式之模板方法詳解

    模板方法的概念:定義了一個操作中的算法的骨架,而將部分步驟的實現(xiàn)在子類中完成。模板方法模式使得子類可以不改變一個算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟
    2022-07-07
  • Spring Cloud下基于OAUTH2認(rèn)證授權(quán)的實現(xiàn)示例

    Spring Cloud下基于OAUTH2認(rèn)證授權(quán)的實現(xiàn)示例

    這篇文章主要介紹了Spring Cloud下基于OAUTH2認(rèn)證授權(quán)的實現(xiàn)示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • SpringBoot+Redis布隆過濾器防惡意流量擊穿緩存

    SpringBoot+Redis布隆過濾器防惡意流量擊穿緩存

    本文主要介紹了SpringBoot+Redis布隆過濾器防惡意流量擊穿緩存,文中根據(jù)實例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評論

光山县| 且末县| 宁安市| 大庆市| 江口县| 福清市| 甘谷县| 珲春市| 安义县| 哈尔滨市| 连山| 大丰市| 肃南| 洛南县| 友谊县| 大埔县| 蒙山县| 邓州市| 姚安县| 珲春市| 明水县| 石台县| 确山县| 年辖:市辖区| 黄龙县| 鞍山市| 庐江县| 西安市| 和顺县| 枣阳市| 巫山县| 新邵县| 普陀区| 漳平市| 长治市| 尉犁县| 砚山县| 沾益县| 聂荣县| 盱眙县| 大姚县|