在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 容器管理。 就能达到咱们想要的结果了