Spring Boot 自定义 Filter


       在 Spring Boot 之前自定义 Filter 的配置,都是在 webapp/WEB-INF/web.xml 文件下来配置;或者说使用 @WebFilter 注解的方式来配置。在使用 Spring Boot 开发 Web 项目时,并没有 web.xml 配置文件的存在,所以 Spring Boot 为我们提供了两种方式来将我们自定义的 Filter注册到 Spring 容器中。

  1. 使用 @WebFilter 注解方式
  2. 通过 FilterRegistrationBean类的方式

1.使用 @WebFilter 注解方式

1.1 自定义 MyFilter 类

       自定义一个 MyFilter 类,添加注解@WebFilter,通过 value/urlPattern 属性来指定映射的 URL。

/**
 * TODO 自定义Filter
 *
 * @author liuzebiao
 * @Date 2020-4-2 15:27
 */
//@WebFilter(value = {"/myTest","/filter"},filterName="myFilter")   
//指定vlaue属性 和 urlPattern属性均可以
@WebFilter(urlPatterns = {"/myFilter","/filter"},filterName="MyFilter")
public class MyFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("init 方法");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("开始执行 Filter");
        //获取URL请求参数
        Enumeration enu = request.getParameterNames();
        while (enu.hasMoreElements()) {
            String paraName = (String) enu.nextElement();
            System.out.println(paraName + ": " + request.getParameter(paraName));
        }
        //执行过滤器
        chain.doFilter(request, response);
    }

    @Override
    public void destroy() {
        System.out.println("destroy 方法");
    }
}
1.2 添加 @ServletComponentScan 注解

       在Spring Boot 启动类上,添加一个 @ServletComponentScan 注解

@ServletComponentScan
@SpringBootApplication
public class BootApplication {

    public static void main(String[] args) {
        // Spring应用启动起来         
        SpringApplication.run(BootApplication.class,args);

    }
}

2.编写FilterRegistrationBean类的方式

2.1 同样先自定义一个 MyFilter(代码同1.1中 MyFilter,唯一区别是不需要加@WebFilter注解)
/**
 * TODO 自定义Filter
 *
 * @author liuzebiao
 * @Date 2020-4-2 15:27
 */
public class MyFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("init 方法");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("开始执行 Filter");
        //获取URL请求参数
        Enumeration enu = request.getParameterNames();
        while (enu.hasMoreElements()) {
            String paraName = (String) enu.nextElement();
            System.out.println(paraName + ": " + request.getParameter(paraName));
        }
        //执行过滤器
        chain.doFilter(request, response);
    }

    @Override
    public void destroy() {
        System.out.println("destroy 方法");
    }
}

2.2 添加 Spring Boot 配置类,将自定义的 MyServlet 注册到容器中
@Configuration
public class MyServerConfig {

    //注册Filter组件
   @Bean
    public FilterRegistrationBean myFilter(){
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(new MyFilter());
        filterRegistrationBean.setUrlPatterns(Arrays.asList("/myFilter","/filter"));
        return filterRegistrationBean;
    }
}

       当我们访问 /myFilter 请求时,便会执行到我们自定义的 MyFilter中。Filter URL映射地址,接收可变参数,支持同时配置多个 URL 地址。如下所示:

@Bean
public FilterRegistrationBean myFilter(){
	FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
    filterRegistrationBean.setFilter(new MyFilter());
    filterRegistrationBean.setUrlPatterns(Arrays.asList("/myTest","/filter"));
    return filterRegistrationBean;
}
@WebFilter(urlPatterns = {"/myFilter","/filter"},filterName="myFilter")
public class MyFilter implements Filter {

}

Spring Boot 自定义 Filter,介绍到此为止

如果本文对你有所帮助,那就给我点个赞呗

End

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扛麻袋的少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值