springboot中注入FilterRegistrationBean不生效原因

x33g5p2x  于2021-11-28 转载在 Spring  
字(1.9k)|赞(0)|评价(0)|浏览(626)

springboot中注入FilterRegistrationBean不生效原因

回顾

最近自定义了两个过滤器,接口请求返回加密sql注入处理过滤器,因为在封装一些工具包,我在单独调好之后,就打算做成一个注解,像springboot启动类上加@EnableScheduling一样,可以随意控制,当我不想让这俩过滤器生效的时候,那就不加这个注解就可以了。
当然我想到了FilterRegistrationBean的使用方法,注入这两个过滤器。
但是当我写完之后,打成包之后,发现只有sql注入过滤器生效。

原因

原因就是我通过@Bean注解注入FilterRegistrationBean时,没有对它们起别名,造成冲突,只能注入一个。
我的工程里,写了两个下边的方法:

注入加密过滤器
  1. /** * @return 注入加密过滤器 */
  2. @Bean
  3. public FilterRegistrationBean filterRegistration() {
  4. FilterRegistrationBean registration = new FilterRegistrationBean();
  5. registration.setFilter(new EncryptionFilter());
  6. registration.addUrlPatterns("/*");
  7. registration.setName("encryptionFilter");
  8. registration.setOrder(1);
  9. return registration;
  10. }
注入sql注入过滤器
  1. /** * @return 注入加密过滤器 */
  2. @Bean
  3. public FilterRegistrationBean filterRegistration() {
  4. FilterRegistrationBean registration = new FilterRegistrationBean();
  5. registration.setFilter(new SqlInjectManagerFilter());
  6. registration.addUrlPatterns("/*");
  7. registration.setName("sqlInjectManagerFilter");
  8. registration.setOrder(2);
  9. return registration;
  10. }

这个问题虽然简单,但是确实影响到我思路了,我最初一直在考虑是不是我做的springboot启动类加注解触发过滤器注入的方式不对,也是因为我看了下@EnableTransactionManagement的注入方式,我差点就怀疑@Import在打成工具包后不能多个使用的问题。尴尬~~~
当我一比较这俩方法的时候,我才怀疑到名字冲突了。因此就分别对它们加了名称如下:

  1. /** * @return 注入加密过滤器 */
  2. @Bean(name = "encryptionFilter")
  3. public FilterRegistrationBean filterRegistration() {
  4. FilterRegistrationBean registration = new FilterRegistrationBean();
  5. registration.setFilter(new EncryptionFilter());
  6. registration.addUrlPatterns("/*");
  7. registration.setName("encryptionFilter");
  8. registration.setOrder(1);
  9. return registration;
  10. }
  1. /** * @return 注入加密过滤器 */
  2. @Bean(name = "sqlInjectManagerFilter")
  3. public FilterRegistrationBean filterRegistration() {
  4. FilterRegistrationBean registration = new FilterRegistrationBean();
  5. registration.setFilter(new SqlInjectManagerFilter());
  6. registration.addUrlPatterns("/*");
  7. registration.setName("sqlInjectManagerFilter");
  8. registration.setOrder(2);
  9. return registration;
  10. }

相关文章