(转)Springboot 中filter 注入对象

问题:我建立一个全局拦截器,当然,这是测试的时候建立的,我把它命名为LogFilter,它继承了Filter,web应用启动的顺序是:listener->filter->servlet,而因为项目应用了springboot,所以我们项目启动时,先初始化listener,因此注解的bean会被初始化和注入;然后再来就filter的初始化,再接着才到我们的dispathServlet的初始化,因此,当我们需要在filter里注入一个注解的bean时,就会注入失败,因为filter初始化时,注解的bean还没初始化,没法注入。

那么,解决方法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
public FilterRegistrationBean filterProxy(){
   FilterRegistrationBean registrationBean = new FilterRegistrationBean();
   DelegatingFilterProxy httpBasicFilter = new DelegatingFilterProxy();
   registrationBean.setFilter(httpBasicFilter);
   Map<String,String> m = new HashMap<String,String>();
   m.put("targetBeanName","logFilter");
   m.put("targetFilterLifecycle","true");
   registrationBean.setInitParameters(m);
   List<String> urlPatterns = new ArrayList<String>();
   urlPatterns.add("/*");
   registrationBean.setUrlPatterns(urlPatterns);
   return registrationBean;
}
这样你就可以在LogFilter里面添加@Autowired下的bean了。 
public class LogFilter implements Filter {
    @Autowired
    @Qualifier(value="rztRabbitTemplate")
    private RabbitTemplate rabbitTemplate;
复制代码
@Bean
    public FilterRegistrationBean securityFilter() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(new DelegatingFilterProxy("SecurityFilter"));
        registration.addInitParameter("targetFilterLifecycle", "true");
        registration.addUrlPatterns("/*");
        registration.setOrder(102);
        return registration;
    }
    
    @Bean(name = "SecurityFilter")
    public SecurityFilter getSecurityFilter(){
        return new SecurityFilter();
    }
View Code
复制代码
转自:http://blog.csdn.net/u013030980/article/details/55270818#comments
posted @   人艰不拆_zmc  阅读(748)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示