美文网首页
Spring boot 中使用Filter

Spring boot 中使用Filter

作者: __youzhiyong | 来源:发表于2018-01-12 20:27 被阅读0次

在以往的web工程中,我们自定义Filter的步骤很简单:

  1. 定义一个继承自Filter的EncodingFilter类
  2. 在web.xml的配置如下:
<filter>  
    <filter-name>encodingfilter</filter-name>  
    <filter-class>com.my.app.EncodingFilter</filter-class>  
    <init-param>  
        <param-name>encoding</param-name>  
        <param-value>UTF-8</param-value>  
    </init-param>  
</filter>  

<filter-mapping>  
    <filter-name>encodingfilter</filter-name>  
    <url-pattern>/*</url-pattern>  
</filter-mapping>

到此,自定义filter完成

但是,在Spring boot中已经取消了web.xml文件。那么,我们怎么自定义filter呢?

这里有使用注解和非注解两种方式实现方式
注解方式:

  1. 定义一个继承自Filter的类
  2. 在自定义类上面添加如下注解
@Order(1)  //order表示filter的执行顺序,值越小越靠前
@WebFilter(filterName = "myFilter", urlPatterns = "/*")   //urlPatterns 通配符
public class TestFilter implements Filter {
    ...
}
  1. 在Application类上面加上@ServletComponentScan注解

到此,自定义filter完成~~~

非注解方式:

  1. 定义一个MyFilter继承自Filter的类
  2. 定义一个MvcConfigurations类继承自WebMvcConfigurerAdapter,并加上@Configuration注解
@Configuration
public class MvcConfigurations extends WebMvcConfigurerAdapter {
    ...
}
  1. 在MvcConfigurations类中定义一个MyFilter的Bean方法,如下:
@Bean
public MyFilter addFilter() {
    return new MyFilter();
}

到此,自定义filter完成~~~

在使用filter的时候,我们可能会遇到这样的问题,一次请求过来filter中的doFilter方法到底执行了几次?

代码如下:

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    System.out.println("request");
    //todo before request
    filterChain.doFilter(servletRequest, servletResponse);
    //todo after response
    System.out.println("response");
}

问:对于上面的代码,当一次请求过来,输出会是怎样?

相关文章

网友评论

      本文标题:Spring boot 中使用Filter

      本文链接:https://www.haomeiwen.com/subject/monfoxtx.html