springboot中注入FilterRegistrationBean不生效原因
回顾
最近自定义了两个过滤器,接口请求返回加密
和sql注入处理
过滤器,因为在封装一些工具包,我在单独调好之后,就打算做成一个注解,像springboot
启动类上加@EnableScheduling
一样,可以随意控制,当我不想让这俩过滤器生效的时候,那就不加这个注解就可以了。
当然我想到了FilterRegistrationBean
的使用方法,注入这两个过滤器。
但是当我写完之后,打成包之后,发现只有sql注入过滤器
生效。
原因
原因就是我通过@Bean
注解注入FilterRegistrationBean
时,没有对它们起别名,造成冲突,只能注入一个。
我的工程里,写了两个下边的方法:
注入加密过滤器
/*** @return 注入加密过滤器*/@Beanpublic FilterRegistrationBean filterRegistration() {FilterRegistrationBean registration = new FilterRegistrationBean();registration.setFilter(new EncryptionFilter());registration.addUrlPatterns("/*");registration.setName("encryptionFilter");registration.setOrder(1);return registration;}
注入sql注入过滤器
/*** @return 注入加密过滤器*/@Beanpublic FilterRegistrationBean filterRegistration() {FilterRegistrationBean registration = new FilterRegistrationBean();registration.setFilter(new SqlInjectManagerFilter());registration.addUrlPatterns("/*");registration.setName("sqlInjectManagerFilter");registration.setOrder(2);return registration;}
这个问题虽然简单,但是确实影响到我思路了,我最初一直在考虑是不是我做的springboot
启动类加注解触发过滤器注入的方式不对,也是因为我看了下@EnableTransactionManagement
的注入方式,我差点就怀疑@Import
在打成工具包后不能多个使用的问题。尴尬~~~
当我一比较这俩方法的时候,我才怀疑到名字冲突了。因此就分别对它们加了名称如下:
/*** @return 注入加密过滤器*/@Bean(name = "encryptionFilter")public FilterRegistrationBean filterRegistration() {FilterRegistrationBean registration = new FilterRegistrationBean();registration.setFilter(new EncryptionFilter());registration.addUrlPatterns("/*");registration.setName("encryptionFilter");registration.setOrder(1);return registration;}
/*** @return 注入加密过滤器*/@Bean(name = "sqlInjectManagerFilter")public FilterRegistrationBean filterRegistration() {FilterRegistrationBean registration = new FilterRegistrationBean();registration.setFilter(new SqlInjectManagerFilter());registration.addUrlPatterns("/*");registration.setName("sqlInjectManagerFilter");registration.setOrder(2);return registration;}