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

Spring的@PreAuthorize注解自定義權(quán)限校驗詳解

 更新時間:2023年11月06日 08:32:49   作者:Slavic_  
這篇文章主要介紹了Spring的@PreAuthorize注解自定義權(quán)限校驗詳解,由于項目中,需要對外開放接口,要求做請求頭校驗,不做其他權(quán)限控制,所以準備對開放的接口全部放行,不做登錄校驗,需要的朋友可以參考下

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

使用場景:

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

  • 開啟@EnableGlobalMethodSecurity(prePostEnabled = true)注解, 在繼承 WebSecurityConfigurerAdapter 這個類的類上面貼上這個注解.并且prePostEnabled設(shè)置為true,@PreAuthorize這個注解才能生效,SpringSecurity默認是關(guān)閉注解功能的.
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter implements WebMvcConfigurer {....}
  • 編寫自定義的鑒權(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;
    }
}
  • 創(chuàng)建自定義異常類
public class SginCheckException extends BaseException {
    public SginCheckException() {
        super();
    }
    public SginCheckException(String message) {
        super(SystemErrorType.SIGNATURE_ERROR,message);
    }
}

  • 在統(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);
    }
}
  • 最后就是在需要鑒權(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é)束語:

當然這個注解還有很多用法.我只是記錄一下我的使用方法.不喜勿噴.

到此這篇關(guān)于Spring的@PreAuthorize注解自定義權(quán)限校驗詳解的文章就介紹到這了,更多相關(guān)@PreAuthorize注解自定義權(quán)限校驗內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

金溪县| 汉中市| 桂林市| 普陀区| 海口市| 军事| 志丹县| 清镇市| 革吉县| 凤凰县| 赫章县| 镇原县| 兴城市| 万盛区| 武宁县| 涟水县| 广汉市| 辉县市| 嫩江县| 拉萨市| 江源县| 汉源县| 嫩江县| 长乐市| 延长县| 银川市| 神木县| 临西县| 朝阳区| 宝清县| 楚雄市| 大城县| 正阳县| 崇左市| 思南县| 望城县| 沛县| 宁强县| 邵武市| 如东县| 曲阜市|