首页
归档
留言
广告合作
友链
美女主播
Search
1
博瑞GE车机升级/降级
5,146 阅读
2
Mac打印机设置黑白打印
4,517 阅读
3
修改elementUI中el-table树形结构图标
4,516 阅读
4
Mac客户端添加腾讯企业邮箱方法
4,351 阅读
5
intelliJ Idea 2022.2.X破解
4,060 阅读
Java
HarmonyOS Next
Web前端
微信开发
开发辅助
App开发
数据库
随笔日记
登录
/
注册
Search
标签搜索
Spring Boot
Java
Spring Cloud
Mac
mybatis
WordPress
Nacos
Spring Cloud Alibaba
Mybatis-Plus
jQuery
Java Script
asp.net
微信小程序
Sentinel
UniApp
MySQL
asp.net core
IntelliJ IDEA
Jpa
树莓派
Laughing
累计撰写
570
篇文章
累计收到
1,424
条评论
首页
栏目
Java
HarmonyOS Next
Web前端
微信开发
开发辅助
App开发
数据库
随笔日记
页面
归档
留言
广告合作
友链
美女主播
搜索到
1
篇与
的结果
2021-06-07
Spring Boot注册拦截器Interceptor
Spring MVC提供了AOP风格的拦截器,拥有更加精细的拦截器处理能力。Spring Boot中拦截器的注册更加方便,步骤如下:spring-boot-starter-web创建拦截器,实现HandlerInterceptor配置拦截器,定义配置类进行拦截器的配置增加依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>实现HandlerInterceptor代码如下:public class MyInterceptor implements HandlerInterceptor { private final Logger logger = LoggerFactory.getLogger(MyInterceptor.class); /** * 方法执行前运行 * 必须返回true,后面的方法才能执行 * @param request * @param response * @param handler * @return * @throws Exception */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { logger.info("我先执行"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { logger.info("我在controller方法之后执行"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { logger.info("我最后执行"); } }配置拦截器@Configuration public class MyWebMvcConfig implements WebMvcConfigurer { /** * 拦截器 * * @param registry registry */ @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new MyInterceptor()) //配置拦截的路由 .addPathPatterns("/interceptor/**") //配置不拦截的路由 .excludePathPatterns("/demo/**") //配置顺序 .order(1); } }测试定义controller测试我们的拦截器@RestController @RequestMapping("interceptor") public class InterceptorController { private final Logger logger = LoggerFactory.getLogger(InterceptorController.class); @GetMapping("/test") public String testInterceptor(){ logger.info("我是controller方法"); return "success"; } }通过调用http://localhost:8080/interceptor/test查看输出日志。[line]温馨提示[/line]拦截器按照preHandle→Controller→postHandle→afterHandle的顺序执行。只有preHandle方法返回true时,后面的方法才会执行。当拦截器链内存在多个拦截器时,postHandle在拦截器链内所有拦截器返回成功时才会调用。当拦截器链内存在多个拦截器时,afterHandle在拦截器链内所有拦截器返回true时才会调用。当拦截器链内存在多个拦截器时,如果第一个拦截器的preHandle方法返回false,则后面的方法都不会执行。调用controller方法时,只要配置了拦截的路由,哪怕前端请求404,仍然会调用preHandle、postHandle及afterHandle的方法。如果我们设置了order,代码如下:/** * 拦截器 * * @param registry registry */ @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new MyInterceptor2()) //配置拦截的路由 .addPathPatterns("/interceptor/**") //配置不拦截的路由 .excludePathPatterns("/demo/**") //配置顺序 .order(200); registry.addInterceptor(new MyInterceptor1()) //配置拦截的路由 .addPathPatterns("/interceptor/**") //配置不拦截的路由 .excludePathPatterns("/demo/**") //配置顺序 .order(300); }
2021年06月07日
1,147 阅读
1 评论
1 点赞