过滤器Filter和拦截器Interceptor

背景,项目引入了swagger-ui,但是由于客户对安全性的要求,不让访问swagger的/v2/api-docs接口,由于swagger在项目底层的jar包配置类中引入,不想修改底层jar包,想用拦截器处理。编写拦截器之后发现/v2/api-docs接口未被拦截,仍然正常访问,很是郁闷~_~!

思考片刻后怀疑是跳过了拦截器于是查资料发现:

Spring MVC拦截器是一种AOP(面向切面编程)技术,它允许开发者在请求处理的不同阶段插入自定义的处理逻辑。拦截器在请求到达Controller之前和之后执行,允许我们在处理请求和响应过程中添加额外的功能。由此发现拦截器是SpringMVC的功能,而如果是原生的Servlet可能不会被拦截。 

基于此信息,随采用过滤器处理,拦截下了swagger的/v2/api-docs接口。可以理解为过滤器可以拦截Servlet原生请求。同时,验证Filter也还可以拦截SpringMVC的请求。

基于此决定好好整理下Filter和Interceptor原理区别:

FilterInterceptor
出生不同来自Servlet来自Spring
使用范围不同过滤器实现了javax.servlet.Filter接口,也就是说过滤器的实现依赖于Tomcat等容器,只能在Web项目中使用。拦截器实现了org.springframework.web.servlet接口,由spring容器进行管理,并不依赖Tomcat等容器,既可以在web程序,也可以在非web程序中,比如Swing、Application等
实现原理基于过滤器链接ApplicationFilterChain实现基于反射
使用场景字符编码设置、响应数据压缩(通用功能)是否登录判断、权限判断、日志等等(偏业务功能)

触发时机不同:

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值