Springboot中创建Filter的两种方式

传统的javaEE增加Filter是在web.xml中配置,如以下代码:

<filter>
   <filter-name>TestFilter</filter-name>
    <filter-class>com.test.filter.TestFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>TestFilter</filter-name>
  <url-pattern>/*</url-pattern>
  <init-param>
    <param-name>paramName</param-name>
    <param-value>paramValue</param-value>
  </init-param>
</filter-mapping>

那在springboot中没有web.xml, 该如何配置Filter呢?
我们来看一下CharacterEncodingFilter是怎么配置的,见下图:
CharacterEncodingFilter
首先,我们可以发现CharacterEncodingFilter这个类的声明上面并没有@Component类似的注解,说明这个类并不能被Spring的注解扫描器扫描进Spring 的 Context,必须有一种方式能让Spring感知到这个Filter的存在,那么在spring boot 中是怎么做到的呢?见如下代码:
autoconfig
上图可见,是通过Spring-boot-autoconfig包下面的HttpEncodingAutoConfiguration这个配置类进行注入的。
Filter
然后再容器中找到Filter接口的所有实现类,并通过FilterRegistrationBeanAdapter转换为FilterRegistrationBean,这个类实现了ServletContextInitializer接口,用来在ServletContext中注入Filter。
ServletContextInitializer
也可以通过直接注入FilterRegistrationBean的实例:
RegistrationBean
还有一种比较方便的方式就是使用@WebFilter注解:

@Order(1)
@WebFilter(filterName = "filter1", urlPatterns = "/*")
public class FilterFirst implements Filter {
	...
}

比较核心的代码是自定义类上面加上@WebFilter,其中@Order注解表示执行过滤顺序,值越小,越先执行。
这种方法效果和上面版本一样,但是用起来更加方便!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值