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

詳解Java攔截器以及自定義注解的使用

 更新時間:2022年01月10日 08:46:14   作者:李三歲yep  
這篇文章主要為大家介紹了Java攔截器以及自定義注解的使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助<BR>

1,設置預處理,設置不需要攔截的請求

@Component
public class MyWebConfig implements WebMvcConfigurer {
  private final UserTokenInterceptor userTokenInterceptor;
  private final SecurityInterceptor securityInterceptor;
  public MyWebConfig(
      UserTokenInterceptor userTokenInterceptor, SecurityInterceptor securityInterceptor) {
    this.userTokenInterceptor = userTokenInterceptor;
    this.securityInterceptor = securityInterceptor;
  }
  @Override
  public void addInterceptors(InterceptorRegistry registry) {
    // 定義排除swagger訪問的路徑配置
    String[] swaggerExcludes =
        new String[] {"/swagger-ui.html", "/swagger-resources/**", "/webjars/**"};
    registry
        .addInterceptor(userTokenInterceptor)
        .addPathPatterns("/**")
        .excludePathPatterns(
            "/user/login", "/static/**", "/*.html", "/*.ico", "/*.json", "/*.png", "/heartbeat/**")
        .excludePathPatterns(swaggerExcludes);
    registry
        .addInterceptor(securityInterceptor)
        .addPathPatterns("/maintain/**", "/user/**")
        .excludePathPatterns("/user/login");
  }
}

2.UserTokenInterceptor ,securityInterceptor分別處理不同的請求攔截,執(zhí)行不同的攔截邏輯。

2個處理的類請求上可以有交集,2個處理類都執(zhí)行。

@Component
public class UserTokenInterceptor implements HandlerInterceptor {
  private final EmpInfoService empInfoService;
  public UserTokenInterceptor(EmpInfoService empInfoService) {
    this.empInfoService = empInfoService;
  }
  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
      throws Exception {
    // 校驗handler是否是HandlerMethod
    if (!(handler instanceof HandlerMethod)) {
      return true;
    }
    // 從請求頭中獲取token
    String token = request.getHeader("Authorization");
    /**
     * update:2021/11/30 ShengJieLi
     * 增加邏輯:Authorization的值不為本系統(tǒng)生成的token時,解密Authorization,獲取token并驗證
     */
    if (StrUtil.isNotEmpty(token)) {
      EmpInfo securityEmployee = empInfoService.queryToken(token);
      if(securityEmployee != null){
        // token有效
        String ref = empInfoService.isRef(token);
        if (StrUtil.isNotBlank(ref)) {
          response.setHeader("Access-Control-Expose-Headers", "token");
          response.addHeader("token", ref);
        }
      }else{
        //Authorization為PBE加密數(shù)據(jù)
        securityEmployee = empInfoService.analyticQueryToken(token,response);
      }
      if (securityEmployee != null) {
        // token有效
        // 將User對象放入到ThreadLocal中
        UserLocal.set(securityEmployee);
        return true;
      }
      return false;
    }
//    String s = JSONUtil.toJsonStr(ResponseResult.error(ErrorCode.TOKEN_ERROR));
//    response.setContentType("text/html;charset=UTF-8");
//    JSONUtil.toJsonStr(s, response.getWriter());
//    response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
    InterceptorExceptionResolver.interceptorError(response,ErrorCode.TOKEN_ERROR);
    //update 結束
    return false;
  }
  @Override
  public void afterCompletion(
      HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
      throws Exception {
    // 響應結束后刪除對象
    UserLocal.remove();
  }
}
@SecurityGrade({"SUPER_ADMIN", "SYSTEM_ADMIN"})
public class SecurityController {
  private final EmpInfoService empInfoService;
  public SecurityController(EmpInfoService empInfoService) {
    this.empInfoService = empInfoService;
  }
  @GetMapping("getUserInformation")
  @ApiOperation("登陸用戶信息")
  @NoAuthorization
  public ResponseResult getUserInformation(@ApiIgnore HttpServletResponse response) {
    return empInfoService.getUserInformation(response);
  }
}

3.關于注解的使用

@SecurityGrade({"SUPER_ADMIN", "SYSTEM_ADMIN"})
public class SecurityController {
  private final EmpInfoService empInfoService;
  public SecurityController(EmpInfoService empInfoService) {
    this.empInfoService = empInfoService;
  }
  @GetMapping("getUserInformation")
  @ApiOperation("登陸用戶信息")
  @NoAuthorization
  public ResponseResult getUserInformation(@ApiIgnore HttpServletResponse response) {
    return empInfoService.getUserInformation(response);
  }
}

method.getMethodAnnotation(SecurityGrade.class) 獲得注解信息,methodAnnotation.value()獲得注解內容"SUPER_ADMIN", "SYSTEM_ADMIN"。

總結

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!

相關文章

  • java線程的中斷和同步問題的實現(xiàn)

    java線程的中斷和同步問題的實現(xiàn)

    本文主要介紹了java線程的中斷和同步問題的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-07-07
  • java hasNext()使用實例解析

    java hasNext()使用實例解析

    這篇文章主要介紹了java hasNext()使用實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • 關于IDEA創(chuàng)建spark maven項目并連接遠程spark集群問題

    關于IDEA創(chuàng)建spark maven項目并連接遠程spark集群問題

    這篇文章主要介紹了IDEA創(chuàng)建spark maven項目并連接遠程spark集群,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • Java線程休眠的5種方法

    Java線程休眠的5種方法

    這篇文章主要介紹了Java線程休眠的5種方法,分別是Thread.sleep、TimeUnit、wait、Condition、LockSupport,下面文章將對這五種方法進行詳細講解,需要的小伙伴可以參考一下
    2022-05-05
  • Java基礎之java泛型通配符詳解

    Java基礎之java泛型通配符詳解

    Java 泛型(generics)是 JDK 5 中引入的一個新特性, 泛型提供了編譯時類型安全檢測機制,該機制允許開發(fā)者在編譯時檢測到非法的類型,今天通過本文給大家介紹java泛型通配符的相關知識,感興趣的朋友一起看看吧
    2021-07-07
  • SpringBoot集成PDFBox實現(xiàn)電子簽章的代碼詳解

    SpringBoot集成PDFBox實現(xiàn)電子簽章的代碼詳解

    Apache PDFBox 是一個開源的 Java 庫,用于處理 PDF 文檔,它提供了一系列強大的功能,包括創(chuàng)建、渲染、拆分、合并、加密、解密 PDF 文件,以及從 PDF 中提取文本和元數(shù)據(jù)等,本文給大家介紹了SpringBoot集成PDFBox實現(xiàn)電子簽章,需要的朋友可以參考下
    2024-09-09
  • Java中創(chuàng)建線程的兩種方式詳細說明

    Java中創(chuàng)建線程的兩種方式詳細說明

    這篇文章主要介紹了Java中創(chuàng)建線程的兩種方式詳細說明,Java使用java.lang.Thread類代表線程,所有的線程對象都必須是Thread類或其子類的實例,每個線程的作用是完成一定的任務,實際上就是執(zhí)行一段程序流即一段順序執(zhí)行的代碼,需要的朋友可以參考下
    2023-11-11
  • Java中的接口回調實例

    Java中的接口回調實例

    今天小編就為大家分享一篇關于Java中的接口回調實例,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • spring cloud 的監(jiān)控turbine-rabbitmq的示例

    spring cloud 的監(jiān)控turbine-rabbitmq的示例

    這篇文章主要介紹了spring cloud 的監(jiān)控turbine-rabbitmq的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • JAVA 根據(jù)設置的概率生成隨機數(shù)的方法

    JAVA 根據(jù)設置的概率生成隨機數(shù)的方法

    本篇文章主要介紹了JAVA 根據(jù)設置的概率生成隨機數(shù)的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08

最新評論

通州市| 富源县| 松滋市| 梁河县| 万全县| 大港区| 大名县| 裕民县| 拉孜县| 哈巴河县| 泰安市| 瑞昌市| 江陵县| 兴和县| 武清区| 炉霍县| 沈阳市| 奎屯市| 天台县| 临洮县| 兴山县| 丰宁| 福清市| 和林格尔县| 邳州市| 汉源县| 灯塔市| 米易县| 卢龙县| 三门县| 怀柔区| 石首市| 独山县| 武宁县| 淮滨县| 西充县| 山阴县| 宁乡县| 拜城县| 新营市| 金平|