java过滤器与拦截器的具体区别(java拦截器是什么模式)

技术Java拦截器以及自定义注解的使用是怎么样的Java拦截器以及自定义注解的使用是怎么样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1,设置预处理,设

Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)拦截器以及自定义注解的使用是怎么样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

1,设置预处理,设置不需要拦截的请求

@组件

public class mywebconfigimplesswebmvcconfigurer { 0

privatefinitusertkeninterceptor;

privatefinitialilintinterceptor security interceptor;

publicMyWebConfig(

用户令牌拦截器用户令牌拦截器,安全拦截器安全拦截器

这个。usertokinterceptor=usertokinterceptor;

这个。安全拦截器=安全拦截器;

}

@覆盖

公共void addinterceptors(拦截注册)

//定义排除时髦的访问的路径配置

String[]swaggerExcludes=

newString[]{ '/swag-ui。html ','/swag-resources/* * ','/web jars/* * ' };

登记处。添加拦截器(用户令牌拦截器)。addPathPatterns('/** ')。排除路径模式(

/user/login ','/static/** ','/* .html ','/* .ico ','/* .json ','/* .png ','/heartbeat/**)。排除路径模式(大摇大摆的除外);

登记处。附加概念(安全性概念)。添加路径模式(“/维护/**”、“/用户/* *”)。exclude path patterns('/user/log in ');

}

}

2.UserTokenInterceptor ,securityInterceptor分别处理不同的请求拦截,执行不同的拦截逻辑。

2个处理的类请求上可以有交集,2个处理类都执行。

@组件

publicclassUserTokenInterceptor

 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的值不为本系统生成的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加密数据
        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拦截器以及自定义注解的使用是怎么样的的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/154820.html

(0)

相关推荐

  • 20202320 2021-2022-1 实验七《查找与排序》实验报告

    技术20202320 2021-2022-1 实验七《查找与排序》实验报告 20202320 2021-2022-1 实验七《查找与排序》实验报告课程:《程序设计与数据结构》班级: 2023姓名: 陈欢

    礼包 2021年11月15日
  • 短链接api有哪些(新浪短网址api接口)

    技术如何利用调用新浪短链接/腾讯短链接API接口这篇文章主要为大家展示了“如何利用调用新浪短链接/腾讯短链接API接口”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何利用调

    攻略 2021年12月24日
  • winform程序开机自启动设置方法总结

    技术winform程序开机自启动设置方法总结 winform程序开机自启动设置方法总结1.原理:需要开机自启动的程序,需要将其启动程序的路径写到注册表中指定的文件夹下
    2. 写入注册表的方式有两种
    a.

    礼包 2021年11月18日
  • 过去的日子如什么仿写,匆匆第4段的仿写急!在线等

    技术过去的日子如什么仿写,匆匆第4段的仿写急!在线等1过去的日子如什么仿写、过去的日子如一块巧克力,不久就在嘴里化了;如一滴水,在阳光的照耀下蒸发了;
    如一个细胞,很快就死去了;如一片雪花,被阳光照化了。
    2、在这烟花缤

    生活 2021年10月25日
  • leetcode数组找最大数(leetcode排序中查找元素)

    技术LeetCode如何在排序数组中查找元素的第一个和最后一个位置这篇文章主要介绍LeetCode如何在排序数组中查找元素的第一个和最后一个位置,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 一

    攻略 2021年12月15日
  • C++ 小记

    技术C++ 小记 C++ 小记新学了一下类相关的东西。C++ 小记新学了一下类相关的东西。class
    这东西叫类,看起来和 int,double 这些类型是一样的,int 存的是一个数,class 里面

    礼包 2021年11月12日