引言
回顾一下基础,过滤器和拦截器,过滤器更早执行,拦截器在mvc层,后执行

代码
过滤器
@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注册拦截器
@Configuration
public class WebMvcConfigure implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new Interceptor());
}
}
拦截器主要内容
@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的上下文,而过滤器不可以

评论 0
还没有评论,来说点什么吧。