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