Java拦截器以及自定义注解的使用是怎么样的
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,Java拦截器以及自定义注解的使用是怎么样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1,设置预处理,设置不需要拦截的请求@Comp
千家信息网最后更新 2025年01月31日Java拦截器以及自定义注解的使用是怎么样的
Java拦截器以及自定义注解的使用是怎么样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
1,设置预处理,设置不需要拦截的请求
@Componentpublic 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分别处理不同的请求拦截,执行不同的拦截逻辑。
2个处理的类请求上可以有交集,2个处理类都执行。
@Componentpublic 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的值不为本系统生成的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拦截器以及自定义注解的使用是怎么样的的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!
注解
信息
内容
拦截器
不同
有效
方法
更多
用户
逻辑
问题
处理
束手无策
为此
交集
原因
对此
对象
技能
数据
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发的相关英文
天擎提示网络安全防护未开启
我的世界国际服务器多少钱
新网服务器托管安全吗
oa系统软件开发公司排名
天虹数据库
福州道道通网络技术
网络安全高科技图片
金品服务器
网络技术公司的管理架构
健全本行业的网络安全保护规范
邮箱服务器关闭还能接收吗
武汉三里桥服务器
银行项目一般来说用什么数据库
tbc如何看服务器人数
利用开源国产化基础软件开发
盘锦网络安全渗透工程师培训
网络安全部门来电咨询
网络安全技术实训平台
网络数据服务器连接错误
学校网络安全教育儿歌
美印兔兔软件开发
凯乐科技互联网医疗
飞车数据库
开启数据库追踪的步骤
网络技术的军事运用
在网络安全防护中应承担哪些责任
学习创新网络技术
诺顿网络安全设置
智能机器人数据库