Java interceptor拦截器
1. 编写拦截器组件,实现 HandlerInterceptor 接口
注意此接口中的方法使用了Java新特性 default 默认已实现了接口方法
顾在Idea中Alt+Enter快捷键无法弹出实现的窗口,可以通过 Ctrl+O 快捷键选择重写的接口
@Component public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("======preHandle========="); //return HandlerInterceptor.super.preHandle(request, response, handler); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("======postHandle========="); HandlerInterceptor.super.postHandle(request, response, handler, modelAndView); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("======afterCompletion========="); HandlerInterceptor.super.afterCompletion(request, response, handler, ex); } }
2. 编写配置组件,实现接口 WebMvcConfigurer
同样它默认实现了接口,顾使用Ctrl+O 来选择要重新的接口
@Configuration public class MyInterceptorConfiguration implements WebMvcConfigurer { @Autowired MyInterceptor interceptor; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(interceptor).addPathPatterns("/**/getall"); WebMvcConfigurer.super.addInterceptors(registry); } }
知识点:addPathPatterns():
/**
     - /**: 匹配所有路径
     - /admin/**:匹配 /admin/ 下的所有路径
     - /secure/*:只匹配 /secure/user,不匹配 /secure/user/info
 */
拦截效果如图:
![]()
过滤器、拦截器、AOP的区别
过滤器
过滤器可以拦截到方法的请求和响应(ServletRequest request, SetvletResponse response),并对请求响应做出响应的过滤操作,比如设置字符编码、鉴权操作。
拦截器
拦截器可以在方法之前(preHandle)和方法执行之后(afterCompletion)进行操作,回调操作(postHandle),可以获取执行的方法的名称,请求(HttpServletRequest)。
AOP切片
AOP操作可以对操作进行横向的拦截,最大的优势在于可以获取执行方法的参数,对方法进行统一的处理,常见使用日志,事务,请求参数安全验证等。
顺序
请求->>过滤器->>拦截器-->Aspect->>拦截器->>过滤器->>响应
 
 
                    
                

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号