SpringBoot自定义拦截器(多个拦截器)
在 Spring Boot 中要实现自定义拦截器需要实现 HandlerInterceptor 接口,并重写 preHandle、postHandle 和 afterCompletion 方法:
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
public class MyInterceptor implements HandlerInterceptor {
/**
* @return 返回 true 放行、放回 false 拦截
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("进入拦截器,前置通知" + request.getRequestURI());
//过滤掉 确认的 options 请求
if ("OPTIONS".equals(request.getMethod())) {
return true;
}
String token = request.getHeader("token");
if (token != null) {
return true;
}
return false;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("后置通知");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("最终通知");
}
}
然后实现 WebMvcConfigurer
接口重写 addInterceptor
方法:
@Configuration
public class MyConfig implements WebMvcConfigurer {
@Autowired
MyInterceptor myInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(myInterceptor) // 添加自定义拦截器
.excludePathPatterns("/index") // 设置放行路径
.addPathPatterns("/**"); // 设置拦截路径
// 如果有多个拦截器,继续添加即可
//registry.addInterceptor(myInterceptor2)
// .excludePathPatterns("/index")
// .addPathPatterns("/**");
}
}
多个拦截器的执行顺序如下:(盗一张图)
最先执行 preHandle
的拦截器的 postHandle
和 afterCompletion
都是最后执行的
本文作者:fengzeng
本文链接:https://www.cnblogs.com/Fzeng/p/16254775.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
2021-05-10 利用Docker快速部署Mysql