Spring Boot使用方法小札(4):使用Serlvet中原生Filter API
2016-09-03 22:25
876 查看
在Java Web中除了我们非常熟悉的
在Spring Boot中会自动配置一些Filter以供使用,比如
之后在配置类中声明为Bean,如下:
这样我们的Filter就可以起作用了,如下:
如果想要配置自定义
在配置类中声明如下:
这里使用setUrlPatterns(…)配置
Servlet,还有
Filter和
Listener等,在Java Web基础知识之Filter:过滤一切你不想看到的事情和Java Web基础知识之Listener:监控Servlet的每个动作这两篇文章中已经说明了,但是在Spring Boot怎样使用Java Web中原生的
Filter组件?这里总结一下使用方式。
在Spring Boot中会自动配置一些Filter以供使用,比如
CharacterEncodingFilter、
HiddenHttpMethodFilter、
HttpPutFormContentFilter、
RequestContextFilter、
WebRequestLoggingFilter等,如下:
1.自定义Filter
在Spring Boot中使用原生的Filter其实是很简单,只需要将我们自定义的Filter声明为Bean放到Spring容器中即可,当Spring Boot检测到javax.servlet.Filter的实例就会把它自动加入到
Filter链中,如下自定义一个
Filter:
public class LoggingFilter implements Filter{ private static final Logger logger = LoggerFactory.getLogger(LoggingFilter.class); @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { logger.info("LoggingFilter work"); } @Override public void destroy() { } }
之后在配置类中声明为Bean,如下:
@Configuration public class FilterConfig { @Bean public Filter loggingFilter(){ return new LoggingFilter(); } }
这样我们的Filter就可以起作用了,如下:
2.配置自定义Filter
在第一部分我们只是简单的使用了自定义的Filter,至于有关
Filter的其他问题,比如Filter影响的URL的路径、多个Filter同时声明时的作用顺序等。
如果想要配置自定义
Filter的这些问题,需要将
org.springframework.boot.context.embedded.FilterRegistrationBean定义为Bean进行配置,首先定义两个
Filter,除了上面的LoggingFilter,还有如下:
public class AuthenticationFilter implements Filter { private static final Logger logger = LoggerFactory.getLogger(LoggingFilter.class); @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { logger.info("AuthenticationFilter work"); } @Override public void destroy() { } }
在配置类中声明如下:
@Configuration public class FilterConfig { @Bean public FilterRegistrationBean loggingFilter(){ FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new LoggingFilter()); filterRegistrationBean.setOrder(3); List<String> urls = new ArrayList<>(); urls.add("/logging"); filterRegistrationBean.setUrlPatterns(urls); return filterRegistrationBean; } @Bean public FilterRegistrationBean authenticationFilter(){ FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new AuthenticationFilter()); filterRegistrationBean.setOrder(2); List<String> urls = new ArrayList<>(); urls.add("/authentication"); filterRegistrationBean.setUrlPatterns(urls); return filterRegistrationBean; } }
这里使用setUrlPatterns(…)配置
Filter影响的urls,它的设定的url是相对于contextPath的,setOrder(…)设置过滤器链中作用的顺序,其实从源码中看是使用了
org.springframework.core.Ordered接口来确定顺序,如下:
相关文章推荐
- Spring Boot使用方法小札(2):执行定时任务
- Spring Boot使用方法小札(3):应用启动后做一些事
- Spring Boot使用方法小札(5):小议Spring的拦截器
- Spring Boot中使用Redis做缓存的方法实例
- springboot结合redis使用CachingConfigurerSupport方法不能被继承
- SpringBoot中使用Spring Data Jpa 实现简单的动态查询的两种方法
- Spring Boot使用FastJson解析JSON数据的方法
- spring-boot 方法异步调用,自定义线程池配置使用
- spring-boot @Async 的使用、自定义Executor的配置方法
- Spring boot(20) Spring /Spring boot使用AOP、强制使用cglib(以记录方法耗时为例子)
- Spring------Spring boot data jpa的使用方法
- spring-boot @Async 的使用、自定义Executor的配置方法
- springboot 使用Servlet,Filter,Listener的方法
- 详解Spring Boot中MyBatis的使用方法
- spring-boot-maven-plugin使用方法
- Spring MVC 使用Servlet原生API作为参数,在 spring boot 、 spring cloud 同样适用。
- 小记SpringBoot使用方法
- springboot 使用c3p0数据库连接池的方法
- SpringBoot使用可能遇到的问题及解决方法
- spring boot使用内嵌的tomcat解决不安全的HTTP方法安全漏洞