拦截器、过滤器
拦截器
概念:反射(动态代理)实现,对每个接口的请求进行拦截,比如校验接口请求的token是否有效。
springboot自定义拦截器,继承HandlerInterfaceAdapter
@Component public class AuthorityInterceptor extends HandlerInterceptorAdapter { private static final Logger logger = LoggerFactory.getLogger(AuthorityInterceptor.class); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { logger.info("进入到拦截器中:preHandle() 方法"); System.out.println(request.getServletPath()); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { logger.info("进入到拦截器中:postHandle() 方法中"); System.out.println(request.getRequestURI()); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { logger.info("进入到拦截器中:afterCompletion() 方法中"); System.out.println(request.getServletPath()); } } ———————————————— 版权声明:本文为CSDN博主「苍白的咏叹调」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/kuishao1314aa/article/details/109777304
注册拦截器,可以继承WebMvcConfigurerAdapter或实现 WebMvcConfigurer
@Configuration public class InterceptorAdapterConfig extends WebMvcConfigurerAdapter { @Autowired private AuthorityInterceptor authorityInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { //注册自己的拦截器并设置拦截的请求路径 registry.addInterceptor(authorityInterceptor).addPathPatterns("/**"); super.addInterceptors(registry); }
过滤器
概念:函数回调实现,过滤请求,容器初始化时候使用。
拦截器和过滤器区别:
1. 过滤器只是在容器初始化时候使用,拦截器每个接口调用的时候都会使用。
2. 过滤器依赖servlet容器 , 拦截器不依赖servlet。
3. 过滤器需要每次filter.doFilter方法去调用,拦截器是方法执行前 中 后调用
拦截器和过滤器执行顺序:
过滤前->拦截前->Action处理->拦截后->过滤后
参考文章:https://blog.csdn.net/reggergdsg/article/details/52962774