Spring Boot 优雅的使用Filter

Spring Boot 优雅的使用Filter

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进行自定义注册达到实际的作用,根据自己的编码风格选中一种方式即可。

猜你喜欢

转载自blog.csdn.net/pangpengshuai/article/details/120134431