Laughing
Spring Boot注册拦截器Interceptor
06/07
本文最后更新于2024年03月17日,已超过187天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!
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
查看输出日志。
温馨提示
- 拦截器按照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);
}
版权属于:
香草物语
本文链接:
https://www.xiangcaowuyu.net/java/spring-boot-register-interceptor.html(转载时请注明本文出处及文章链接)
作品采用:
{!{data:image/webp;base64,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}!}
不错,学习了