spring boot Filter 注入bean

在springMvc 中 若是spring容器想管理Filter的生命週期時候,咱們須要使用DelegatingFilterProxy在web.xml 配置,再新建個Filter的Bean。 
可是在spring-boot中,經過config配置會初始化兩個相同的Filter, 
原本測試了好多種方案,後來直接設置Filter爲bean。發現Filter的autowire就能夠用了,至於原理尚未發現,估計spring-boot對Filter這種掃描到以後進行了特殊處理,由於從打印的日誌來看,boot把這些filter都進行了bean管理。java

AppConfig.javaweb

@Bean
    public Filter testFilter(){
        System.out.println("-------------configuration testFilter---------------");
        return new TestFilter();
    }
1
2
3
4
5
6
public class TestFilter implements Filter{spring

    @Autowired
    JwtManager jwtManager;api

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("TestFilter--------init----------------------" + jwtManager);app

    }ide

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("TestFilter-----------doFilter-------------------" + jwtManager);
    }spring-boot

    @Override
    public void destroy() {
        System.out.println("TestFilter------------------------------" + jwtManager);測試

    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
打印日誌url

2017-06-07 19:16:00.752  INFO 3468 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'testFilter' to: [/*]
TestFilter--------init----------------------com.wuhulala.auth.JwtManager@e685943
1
2
3
若是想自定義攔截url的話 
能夠在AppConfig.java中加入如下代碼.net

@Bean
    public FilterRegistrationBean demoFilter() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(testFilter());
        registration.addUrlPatterns("/api/*");
        registration.addInitParameter("paramName", "paramValue");
        registration.setName("testFilter");

        return registration;     }  由於在spring中 filter是以  FilterRegistrationBean形式存在的,而後咱們  setFilter爲這個filter放入spring 容器管理。  就能達到咱們想要的結果了  

相關文章
相關標籤/搜索