当前位置: 首页 > wzjs >正文

南宁做网站建设阆中做网站

南宁做网站建设,阆中做网站,恋爱网页生成,承德网站开发区地税Spring 拦截器(Interceptor)与过滤器(Filter)对比 核心对比表格 对比维度拦截器(Interceptor)过滤器(Filter)定义Spring MVC 提供的组件,集成于 Spring 处理器链。Servl…

Spring 拦截器(Interceptor)与过滤器(Filter)对比


核心对比表格
对比维度拦截器(Interceptor)过滤器(Filter)
定义Spring MVC 提供的组件,集成于 Spring 处理器链。Servlet 规范组件,属于 Java EE 标准。
作用范围仅限于映射到 Controller 的请求(如 @RequestMapping 处理的请求)。所有请求(包括静态资源、非 Spring 处理的请求)。
执行时机Spring MVC 处理器链中执行(Controller 方法前后)。Servlet 容器启动时初始化,请求到达时立即执行(在 Spring MVC 处理器链之前)。
生命周期由 Spring 容器管理(默认单例),无显式 init()destroy() 方法。由 Servlet 容器管理,需实现 init()destroy() 方法。
核心方法preHandle(), postHandle(), afterCompletion()init(), doFilter(), destroy()
配置方式通过 WebMvcConfigurer.addInterceptors() 注册。通过 FilterRegistrationBeanweb.xml 注册。
典型使用场景权限验证、日志记录、请求参数校验、与 Spring 服务层交互。跨域处理(CORS)、日志记录、请求压缩、静态资源拦截、通用 HTTP 头处理。
依赖注入支持支持 @Autowired 等 Spring 依赖注入。需通过 FilterRegistrationBean@Component 显式注入。
执行顺序控制通过 order() 方法设置优先级(数值越小优先级越高)。通过 FilterRegistrationBean.setOrder()web.xml 的声明顺序控制。
异常处理通过 afterCompletion() 处理异常(需配合 HandlerExceptionResolver)。需在 doFilter() 中通过 try-catch 捕获异常。
性能影响仅针对 Controller 请求,性能影响较小。针对所有请求,可能影响性能(如频繁的静态资源请求)。

关键区别示例
场景 1:身份验证
  • 拦截器:适合与 Spring 服务层结合,如通过 @Autowired 注入 UserService 验证 Token。
  • 过滤器:适合通用 Token 验证(如 JWT),拦截所有请求(包括登录接口)。
场景 2:日志记录
  • 拦截器:记录 Controller 方法级别的执行时间。
  • 过滤器:记录所有请求的 URL、响应时间(包括静态资源)。
场景 3:异常处理
  • 拦截器:通过 afterCompletion() 统计接口错误率。
  • 过滤器:需在 doFilter() 中通过 try-catch 处理异常。

代码示例对比
拦截器配置
@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new AuthInterceptor()).order(1).addPathPatterns("/**").excludePathPatterns("/login");}
}
过滤器配置
@Configuration
public class FilterConfig {@Beanpublic FilterRegistrationBean<CorsFilter> corsFilterRegistration() {FilterRegistrationBean<CorsFilter> registration = new FilterRegistrationBean<>();registration.setFilter(new CorsFilter());registration.addUrlPatterns("/*");registration.setOrder(2);return registration;}
}

生命周期对比
阶段拦截器(Interceptor)过滤器(Filter)
初始化由 Spring 容器自动初始化,无 init() 方法。需实现 init() 方法,在 Servlet 容器启动时调用。
请求处理preHandle() → Controller → postHandle()afterCompletion()doFilter() 中处理请求(需显式调用 chain.doFilter())。
销毁由 Spring 容器管理,无 destroy() 方法。需实现 destroy() 方法,在应用关闭时调用。

执行流程图
客户端请求 →
├─ Filter 的 doFilter() →
│  ├─ Filter 前置处理 →
│  │  └─ 继续 FilterChain →
│  │     ├─ Interceptor 的 preHandle() →
│  │     │  └─ 拦截器前置处理 →
│  │     │     └─ Controller 方法执行 →
│  │     │        └─ Interceptor 的 postHandle() →
│  │     │           └─ 拦截器后置处理 →
│  │     └─ Interceptor 的 afterCompletion() →
│  │        └─ 拦截器完成处理
│  └─ Filter 后置处理
└─ 响应返回

选择建议
  1. 使用拦截器的场景

    • 需要与 Spring 上下文深度集成(如依赖注入服务层)。
    • 仅需处理 Controller 映射的请求(如 /api/**)。
    • 需要细粒度控制请求生命周期(如方法执行前后校验)。
  2. 使用过滤器的场景

    • 需要拦截所有请求(包括静态资源、非 Spring 处理的请求)。
    • 需要直接操作请求/响应对象(如修改 HTTP 头、压缩响应)。
    • 需要在请求到达 Spring 处理器链之前执行逻辑(如统一日志记录)。

总结
  • 拦截器Spring MVC 的高级组件,适合与 Spring 生态深度集成,处理 Controller 层的业务逻辑。
  • 过滤器Servlet 规范的底层组件,适合通用请求处理(如跨域、日志),作用范围更广但灵活性较低。

两者可以 同时使用,形成更复杂的处理链(例如:过滤器处理跨域,拦截器处理权限验证)。

http://www.dtcms.com/wzjs/554265.html

相关文章:

  • 湖北工程建设总承包有限公司网站wordpress中文版下载地址
  • 网站 图片延时加载简约智能设备制造公司网站
  • 小程序可做网站吗长春精神文明建设网站
  • 网站代运营服务公司wordpress页面模板 选项没有
  • 企业网站设计总结外网网站管理制度建设
  • 做网站的合同范文php做商城网站步骤
  • 做门窗接活的网站360网站建设服务
  • 网站百度seo关键词优化网站建设中源码
  • 广州市企业网站建设怎么样吉林网络推广代运营
  • 手机网站与pc网站同步wordpress侧栏显示指定分类
  • 卡片式设计网站制作网络培训心得体会总结
  • 国示建设网站可以做申论的网站
  • 微信网站设计分析先做他个天猫网站
  • 基础型网站价格一元抢宝网站开发
  • 做守望同人的网站网站卖东西怎么做
  • 上海做网站哪里有成都创业平台
  • 公司关于网站设计公司的简介房地产市场调查报告
  • 河南网站建设yijuce建筑新型组合塑料模板
  • 东莞网站建设定制珠海企业建站程序
  • 山东兽药网站建设wordpress 微博 链接地址
  • 怎么做网站布局wordpress用户手册
  • 网站建设考核标准武鸣网站建设
  • 网站设计培训网站建设合同2018
  • 给几个那方面网站网址php招生网站开发
  • 用html做网站山东春季高考网站建设
  • 不需要备案如何做网站在新西兰做兼职的网站
  • 购物类网站都有哪些模块网站备案后改域名
  • 电子产品网站建设策划书国展做网站的公司
  • 福田附近公司做网站建设多少钱做的网站没流量
  • php网站登录系统怎么做建设游戏运营网站开展工作