1 简介
过滤器(Filte)是Servlet技术中最实用的技术,通过Filter技术可以有效的管理服务器的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。
Spring Boot中已经移除了web.xml文件,如果需要注册添加Filter为Spring Bean,在Spring Boot中有二种方式:使用注解和手动配置。
2 使用注解
使用注解有两种方法,具体如下:
- 方法一
直接实现Filter接口,并使用@Component注解标注为组件自动注入bean。
@Component
public class HostCleanFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
chain.doFilter(request,response);
}
public void destroy() {
}
}
- 方法二
实现Filter接口,用@WebFilter注解,指定拦截路径以及一些参数,同时需要在启动类使用@ServletComponentScan,该注解可以扫描@WebFilter自动注入bean。
@Order(1)
@WebFilter(filterName="hostCleanFilter", urlPatterns="/*")
public class HostCleanFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
chain.doFilter(request,response);
}
public void destroy() {
}
}
3 手动配置
第一步,创建一个Filter类
public class HostCleanFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
chain.doFilter(request,response);
}
public void destroy() {
}
}
第二步,手动创建Filter配置类
/**
* Filter配置类
*/
@Configuration
public class HostCleanConfig {
@Bean
public FilterRegistrationBean registerFilter() {
FilterRegistrationBean registrationBean = new FilterRegistrationBean(new HostCleanFilter());
registrationBean.addUrlPatterns("/*");
registrationBean.setName("hostCleanFilter");
registrationBean.setOrder(1);
return registrationBean;
}
}
4 总结
使用Filter是非常简单的操作。通过以上方式都可以对Filter进行自定义注册达到实际的作用,根据自己的编码风格选中一种方式即可。