1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > SpringBoot之Filter过滤器的实现及排序问题

SpringBoot之Filter过滤器的实现及排序问题

时间:2019-05-23 16:09:12

相关推荐

SpringBoot之Filter过滤器的实现及排序问题

相关文章:

SpringBoot 之AOP切面的使用

SpringBoot之Listener注册到Spring容器中的多种方法

SpringBoot之Interceptor拦截器注入使用

SpringBoot 之多个过滤器(Filter) ,监听器(Listener),切面(AOP),拦截器(Interceptor)的指定排序问题总结篇

使用Filter,Listener 时无法注入Bean的解决方法

实现Filter注册到spring容器中跟Listener差不多。

第一种:@WebFilter(urlPatterns="/**",filterName=“loginFilter”)

使用@WebFilter(urlPatterns="/**",filterName=“loginFilter”) 注解

在使用此注解前需要在启动类上加@ServletComponentScan(basePackages=“com.demo”)

使用此方式无法设置filter排序,要想实现排序,只能用类名排序或者使用第二种方式。

@Component // 不管哪种方式都需要添加@Component,表示加入spring 容器中。@WebFilter(urlPatterns="/**",filterName="loginFilter")public class LoginFilter implements Filter{@Overridepublic void init(FilterConfig filterConfig) throws ServletException {filterConfig.getInitParameter("name");//获取你设置的init参数// do somethinglog.debug("init...");}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {// do something//chain.doFilter 需要调用,不然报错没有请求返回.chain.doFilter(request, response);}@Overridepublic void destroy() {// TODO Auto-generated method stub}}

@WebFilter()注解参数

第二种FilterRegistrationBean

推荐使用此种方式,可以设置排序,其他设置跟@WebFilter()差不多

@Component // 不管哪种方式都需要添加@Component,表示加入spring 容器中。public class LoginFilter implements Filter{@Overridepublic void init(FilterConfig filterConfig) throws ServletException {filterConfig.getInitParameter("name");//获取你设置的init参数// do somethinglog.debug("init...");}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {// do something//chain.doFilter 需要调用,不然报错没有请求返回.chain.doFilter(request, response);}@Overridepublic void destroy() {// TODO Auto-generated method stub}}

@Configurationpublic class FilterConfig {@Beanpublic FilterRegistrationBean LoginFilter(){FilterRegistrationBean registrationBean = new FilterRegistrationBean();registrationBean.setFilter(new LoginFilter());registrationBean.addInitParameter("test","true");registrationBean.addInitParameter("test1", "test");registrationBean.addUrlPatterns("/*");registrationBean.setOrder(1); // 设置排序registrationBean.setDispatcherTypes(DispatcherType.REQUEST);return registrationBean;}}

第三种 @Bean

此方式跟FilterRegistrationBean 差不多,不过使用此方式无法配置拦截规则,不推荐使用

@Configuration public class FilterConfig {@Bean public Filter LoginFilter() {return new LoginFilter(); } }

使用Filter需要注意的问题

1、Filter只能通过类名排序,或者使用FilterRegistrationBean 设置order。@Order或者Ordered 接口都无法实现排序

2、使用@WebFilter 只能通过类名进行自定义Filter执行顺序。

3、使用@WebFilter 必须在启动器上加@ServletComponentScan(basePackages=“com.demo”),并且类必须在扫描的包中。

4、使用FIlter 或者Listener 无法使用@Autowired 或者@Resource注解。要想使用spring容器中的bean,则需要实现ApplicationContextAware接口的context注入函数, 将其存入静态变量. 通过ApplicationContext进行获取。或者通过WebApplicationContextUtils.getWebApplicationContext 方式获取。

具体获取方法请看:

5、Filter必须实现init方法,否则无法启动。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。