过滤器和拦截器区别
Inteceptor | Filter | ||
---|---|---|---|
所属包 | 在spring包 | 在javax包 | |
属于哪个容器 | 属于web容器 | 属于spring容器 | |
资源的使用 | 不能获取spring的资源 | 可以获取spring的资源 | |
过滤先后 | 后 | 前 | |
使用场景 | 和业务相关 如日志处理 统计 | 业务无关的公共代码 例如 设置编码 |
使用例子
@Configuration
public class MyConfig implements WebMvcConfigurer {
@Autowired
MyInteceptor myInteceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(myInteceptor);
}
}
@Configuration
public class MyInteceptor 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);
}
@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);
}
}
@WebFilter(urlPatterns = "/*")
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("过滤器:执行 init 方法。");
}
@Override
public void doFilter(ServletRequest servletRequest,
ServletResponse servletResponse,
FilterChain filterChain) throws IOException, ServletException {
System.out.println("过滤器:开始执行 doFilter 方法。");
// 请求放行
filterChain.doFilter(servletRequest, servletResponse);
System.out.println("过滤器:结束执行 doFilter 方法。");
}
@Override
public void destroy() {
System.out.println("过滤器:执行 destroy 方法。");
}
}
测试结果:
过滤器:开始执行 doFilter 方法。
preHandle
postHandle
afterCompletion
过滤器:结束执行 doFilter 方法。
总结:
Inteceptor的功能更加强大,因为可以获取spring的资源,优先使用拦截器
标签:Override,拦截器,区别,System,println,过滤器,public,out From: https://www.cnblogs.com/xiuer211/p/17785013.html