springboot拦截器Interceptor
1、创建一个拦截器类并实现HandlerInterceptor接口,重写preHandle、postHandle、afterCompletion这3个方法
@Slf4j @Component public class UserInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //Controller方法处理之前,若返回false,则中断执行,注意:不会进入afterCompletion } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { //preHandle返回true,Controller方法处理完之后,DispatcherServlet进行视图的渲染之前,也就是说在这个方法中你可以对ModelAndView进行操作 } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { //preHandle返回true,DispatcherServlet进行视图的渲染之后,多用于清理资源 } }
2、创建拦截器的配置类,定义拦截规则
@Configuration public class InterceptorConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { String[] addPath = {"/", "/platform", "/api/platform/**"};//拦截的路径 String[] excludePath = {"/api/platform/testdata/getAtRt"};//排除的路径 registry.addInterceptor(new UserInterceptor()).addPathPatterns(addPath).excludePathPatterns(excludePath); } } //addPathPatterns("/") 表示拦截根目录请求,直接请求域名后面没有加具体路径 //addPathPatterns("/**") 表示拦截所有的请求, //addPathPatterns("/test/**") 表示拦截/test/ 下的所有路径请求, //addPathPatterns("/test/*") 表示拦截/test/abc,拦截/test/aaa , 不拦截 /test/abc/def //addPathPatterns("/test/**").excludePathPatterns("/test/login", “/test/register”) 表示拦截/test/ 下的所有路径请求,但不拦截 /test/login 和 /test/register