Loading... # 引言 回顾一下基础,过滤器和拦截器,过滤器更早执行,拦截器在mvc层,后执行 ![image.png](https://www.zunmx.top/usr/uploads/2023/12/2038353794.png) # 代码 ## 过滤器 ```java @Configuration public class MyFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { Filter.super.init(filterConfig); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 如果需要拦截,可以重定向到其它页面 chain.doFilter(request,response); // 请求放行 } @Override public void destroy() { Filter.super.destroy(); } } ``` ## 拦截器 ## MVC注册拦截器 ```java @Configuration public class WebMvcConfigure implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new Interceptor()); } } ``` ## 拦截器主要内容 ```java @Configuration public class Interceptor implements HandlerInterceptor { @Autowired private RedisTemplate redisTemplate; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 请求执行之前,返回值true为放行 return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception { } } ``` # 思考 过滤器和拦截器的使用时机? > 正如开篇的那张图,拦截器可以使用容器中的bean,而过滤器不行,要考虑业务需求 > 如果处理的是DispatcherServlet之前,只能用过滤器 > 如果处理的是控制器前后,拦截器过滤器都可以 过滤器和拦截器的区别 > 过滤器基于函数回调,拦截器基于反射机制 > 过滤器依赖servlet容器,拦截器不依赖servlet容器 > 过滤器可对所有请求过滤,拦截器只能对指定的起作用,实际上也是顺序问题。 > 拦截器可以访问action的上下文,而过滤器不可以 > © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏