SpringBoot自定义Filter

传统Web工程定时Filter方式:

1:编写自定义Filter

/**
 * @description:编写自定义Filter
 * @date: 2019-06-26
 */
public class TestFilter implements Filter {

    /**
     * 方法用于初始化,项目启动的时候就会被调用,而且只会被调用一次
     * @date: 2019-06-26
     */
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("=========>初始化Filter<============");
    }

    /**
     * 方法用户处理过滤逻辑,只要满足过滤条件就会被执行;在doFilter方法中必须执行FilterChain对象的doFilter方法,否则前端过来的请求就不会进入到控制层
     * @date: 2019-06-26
     */
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("=========>执行Filter过滤器<============");
        // 将请求转发到目的地  
        chain.doFilter(request, response);
    }

    /**
     * 方法用于销毁,项目关闭的时候会被调用,而且只会被调用一次
     * @date: 2019-06-26
     */
    @Override
    public void destroy() {
        System.out.println("=========>销毁Filter<============");
    }
}

2:配置web.xml文件

<filter>  
      <filter-name>filter</filter-name>  
      <filter-class>com.test.filter.TestFilter</filter-class>  
      <init-param>  
          <param-name>charset</param-name>  
          <param-value>UTF-8</param-value>  
      </init-param>  
      <init-param>  
          <param-name>contentType</param-name>  
          <param-value>text/html;charset=UTF-8</param-value>  
      </init-param>  
  </filter>  
  <filter-mapping>  
      <filter-name>filter</filter-name>  
      <!-- * 代表截获所有的请求  或指定请求/test.do  /xxx.do -->  
      <url-pattern>/*</url-pattern>  
  </filter-mapping> 

 

SpringBoot自定义注解:

 1:注解式注入

  1.1 编写自定义Filter并且添加注解

/**
 * @description:自定义注解,并且添加@WebFilter注解
 * @date: 2019-06-26
 */
@WebFilter(urlPatterns = "/*")
public class TestFilter implements Filter {

    /**
     * 方法用于初始化,项目启动的时候就会被调用,而且只会被调用一次
     * @date: 2019-06-26
     */
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("=========>初始化Filter<============");
    }

    /**
     * 方法用户处理过滤逻辑,只要满足过滤条件就会被执行;在doFilter方法中必须执行FilterChain对象的doFilter方法,否则前端过来的请求就不会进入到控制层
     * @date: 2019-06-26
     */
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("=========>执行Filter过滤器<============");
        chain.doFilter(request, response);
    }

    /**
     * 方法用于销毁,项目关闭的时候会被调用,而且只会被调用一次
     * @date: 2019-06-26
     */
    @Override
    public void destroy() {
        System.out.println("=========>销毁Filter<============");
    }
}

  1.2 启动类增加Filter注入注解

@EnableEurekaClient
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
//指定Serlvet和Filter扫描位置如果只有不指定包名也可以会直接扫描,但是为了代码的可读性最好加上,明确Servlet和Filter位置
@ServletComponentScan(basePackages = {"com.micro.picture.tiger.component.servlet", "com.micro.picture.tiger.component.filter"})
public class BatchApplicationStart {
    public static void main(String[] args) {
        SpringApplication.run(BatchApplicationStart.class, args);
    }
}

 

2:代码方式注入(推荐使用此种方式,亦可使用此方法引入三方Filter)

  2.1 编写自定义Filter,不与要注解,只要实现Filter接口即可

/**
 * @description: 实现Filter的测试过滤器-无注解
 * @date: 2019-06-26
 */
public class TestFilter implements Filter {

    /**
     * 方法用于初始化,项目启动的时候就会被调用,而且只会被调用一次
     * @date: 2019-06-26
     */
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("=========>初始化Filter<============");
    }

    /**
     * 方法用户处理过滤逻辑,只要满足过滤条件就会被执行;在doFilter方法中必须执行FilterChain对象的doFilter方法,否则前端过来的请求就不会进入到控制层
     * @date: 2019-06-26
     */
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("=========>执行Filter过滤器-start<============");
        chain.doFilter(request, response);
        System.out.println("=========>执行Filter过滤器-end<============");
    }

    /**
     * 方法用于销毁,项目关闭的时候会被调用,而且只会被调用一次
     * @date: 2019-06-26
     */
    @Override
    public void destroy() {
        System.out.println("=========>销毁Filter<============");
    }
}

  2.2 配置类中增加过滤器配置代码

/**
 * @description: Servlet和Filter配置类
 * @date: 2019-06-26
 */
@Configuration
public class BatchConfig {
    /**
     * 过滤器
     * @date: 2019-06-26
     */
    @Bean
    public FilterRegistrationBean filterRegistration(){
        // 实例化过滤器注册对象,并且注册自定义过滤器
        FilterRegistrationBean filterRegistration = new FilterRegistrationBean(new TestFilter());
        // 设置自定义过滤器的过滤路径
        filterRegistration.addUrlPatterns("/*");
        // 设置过滤器排除路径
        filterRegistration.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,");
        // 设置过滤器名称
        filterRegistration.setName("TestFilter");
        // 设置过滤器顺序
        filterRegistration.setOrder(2006);
        return filterRegistration;
    }
    /**
     * Servlet
     * @date: 2019-06-26
     */
    @Bean
    public ServletRegistrationBean servletRegistration(){
        return new ServletRegistrationBean(new TestServlet(), "/testServlet/*");
    }
}

 

posted @ 2019-06-26 16:44  杏仁拌饭  阅读(164)  评论(0)    收藏  举报