在springMvc 中 如果spring容器想管理Filter的生命周期时候,我们需要使用DelegatingFilterProxy在web.xml 配置,再新建个Filter的Bean。
但是在spring-boot中,通过config配置会初始化两个相同的Filter,
本来测试了好多种方案,后来直接设置Filter为bean。发现Filter的autowire就可以用了,至于原理还没有发现,估计spring-boot对Filter这种扫描到之后进行了特殊处理,因为从打印的日志来看,boot把这些filter都进行了bean管理。
AppConfig.java
@Bean public Filter testFilter(){ System.out.println("-------------configuration testFilter---------------"); return new TestFilter(); }
1
2
3
4
5
6
public class TestFilter implements Filter{ @Autowired JwtManager jwtManager; @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("TestFilter--------init----------------------" + jwtManager); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("TestFilter-----------doFilter-------------------" + jwtManager); } @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
打印日志
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中加入以下代码
@Bean public FilterRegistrationBean demoFilter() { FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setFilter(testFilter()); registration.addUrlPatterns("/api/*"); registration.addInitParameter("paramName", "paramValue"); registration.setName("testFilter"); return registration; }
1
2
3
4
5
6
7
8
9
10
因为在spring中 filter是以
FilterRegistrationBean形式存在的,然后我们
setFilter为这个filter放入spring 容器管理。
就能达到我们想要的结果了
在springMvc 中 如果spring容器想管理Filter的生命周期时候,我们需要使用DelegatingFilterProxy在web.xml 配置,再新建个Filter的Bean。
但是在spring-boot中,通过config配置会初始化两个相同的Filter,
本来测试了好多种方案,后来直接设置Filter为bean。发现Filter的autowire就可以用了,至于原理还没有发现,估计spring-boot对Filter这种扫描到之后进行了特殊处理,因为从打印的日志来看,boot把这些filter都进行了bean管理。
AppConfig.java
@Bean public Filter testFilter(){ System.out.println("-------------configuration testFilter---------------"); return new TestFilter(); }
1
2
3
4
5
6
public class TestFilter implements Filter{ @Autowired JwtManager jwtManager; @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("TestFilter--------init----------------------" + jwtManager); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("TestFilter-----------doFilter-------------------" + jwtManager); } @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
打印日志
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中加入以下代码
@Bean public FilterRegistrationBean demoFilter() { FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setFilter(testFilter()); registration.addUrlPatterns("/api/*"); registration.addInitParameter("paramName", "paramValue"); registration.setName("testFilter"); return registration; }
1
2
3
4
5
6
7
8
9
10
因为在spring中 filter是以
FilterRegistrationBean形式存在的,然后我们
setFilter为这个filter放入spring 容器管理。
就能达到我们想要的结果了
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow