• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Spring Boot使用嵌入式容器,那怎么配置自定义Filter

springboot 海叔叔 22小时前 4次浏览 已收录 0个评论

Listener、Filter和Servlet是Java Web开发过程中常用的三个组件,其中Filter组件的使用频率最高,经常被用来做简单的权限处理、请求头过滤和防止XSS攻击等。如果我们使用的是传统的Spring MVC进行开发,那么只需要在Tomcat的web.xml文件中进行如下配置即可:

PS:在容器启动的时候,上面三个组件启动的顺序是Listener –> Filter –> Servlet,这边安利一个记忆的方法:把启动顺序记忆成“理(Listener)发(Filter)师(Servlet)”即可。

在web.xml中配置这三个组件比较简单,但是使用Spring-Boot开发时使用的是嵌入式容器,并没有web.xml文件让我们进行配置。那么在Spring-Boot中到底要怎么配置Listener、Filter和Servlet等组件呢?

本篇博客以Filter为列,介绍下在Spring-Boot中怎么配置Listener、Filter和Servlet等组件。

方式一:将Filter声明为bean

这边我们先来自定义一个Filter,这个Filter的作用是统计一个接口的调用时间。

在Spring-Boot中配置上面的Filter,[email protected]

上面的Filter默认会拦截所有请求。假如我们想要配置多个拦截器的话,只要再加一个Bean方法就可以了。

上面的配置代码配置了两个Filter,两个Filter默认都会拦截所有请求,拦截的顺序是:filter1–>filter2。这边的逻辑是先配置的Filter先拦截,后配置的Filter后拦截。当然,[email protected][email protected]类上面。

PS: @Order中的value值越大,执行的优先级越小。值越小,优先级越大。当我们自定义执行顺序的时候,[email protected](Ordered.LOWEST_PRECEDENCE – 1)这种形式配置,Ordered.LOWEST_PRECEDENCE减去的值越大,优先级越高,这样看起来比较直观。

另外,Spring还提供了一个OrderedFilter接口,这个接口是Filter和Ordered的组合接口,原理和上面的是一样的。大家可以看情况使用。

上面的这种配置方式优点是配置起来非常简单,但是缺点也比较明显,就是配置不够灵活,默认会拦截所有请求。

方式二:@WebFilter方式

@WebFilter注解是Servlet中提供的注解,[email protected]配置,比上面的方式更加灵活。

通过 @WebFilter 注解的方式配置Filter简单,而且能够自定义url-pattern和拦截顺序。

方式三:使用FilterRegistrationBean配置

注意点:

FilterRegistrationBean 与 Filter 之间是一对一关系。
如果存在多个 FilterRegistrationBean 需要调用其 setName(String name) 为其声明唯一名称,否则只有第一个注册成功的有效。
如果需要保证调用顺序可通过调用其 setOrder(int order) 方法进行设置。

方式四:使用DelegatingFilterProxyRegistrationBean方式

FilterRegistrationBean和DelegatingFilterProxyRegistrationBean区别:

1、FilterRegistrationBean通过onStartup方法直接注册filter。
2、DelegatingFilterProxyRegistrationBean是将DelegatingFilterProxy注册到Servlet3.0+的容器中,同时实现了ApplicationContextAware接口,实例ApplicationContext通过通过传入自定义filter的名称查找对应的bean,并生成相应bean的代理对象。

触类旁通

1、添加自定义Servlet [email protected] 或者ServletRegistrationBean
2、添加自定义Listener也可以采用方法一 @WebListener或者ServletListenerRegistrationBean,注意监听事件是泛型

其他相关类

ServletComponentRegisteringPostProcessor
ServletComponentHandler
WebListenerHandler
WebFilterHandler
WebServletHandler


喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址