过滤器和拦截器区别
过滤器和拦截器区别
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的资源,优先使用拦截器
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)