转载

安全校验(1)-过滤器

过滤器

过滤器简介与简单实现

实现过滤器只需要实现 javax.servlet.Filter 接口即可。

public class LogFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("执行开始...");
        chain.doFilter(request, response);
        System.out.println("执行结束...");
    }
    
    @Override
    public void destroy() {
    }
    
}

注册过滤器到Spring中

在 Spring Boot 项目中注册过滤器

在Spring Boot 项目之中注册过滤器可以通过以下几种方式:

  1. 直接将过滤器声明为一个Spring Bean
  2. 通过将FilterRegistrationBean声明为Spring Bean作为

注意:

  1. 两种方式的区别在于:第一种方式不能够设置拦截的Url,默认拦截是 /* ,而第二种方式你可以通过FilterRegistrationBean中的 setUrlPatterns 来设置拦截的Url
  2. 两种方式都可以设置Filter在整个 应用过滤链 中的顺序:第一种方式通过 @Order 注解指定在整个 应用过滤链 中的位置,第二种方式通过FilterRegistrationBean中的 setOrder 来设置
  3. 以上两种方式实际上都将过滤器声明成了一个 Spring Bean ,因此我们可以使用依赖注入。

查看Spring中的过滤器链

上面提到的 应用过滤链 是位于各种过滤器链的顶端。你可能会说为什么会有 各种过滤器链 ,过滤器链不是只有一条吗?虽然在这篇文章的场景下只有一种过滤链,即应用过滤链,但是在使用spring security,shiro等类似框架时,他们往往是通过在 ApplicationFilterChain 先注册一个顶级过滤器,然后在这个过滤器中定义一条虚拟过滤器链,从而实现自己的过滤器链。实现的原理效果如下图所示:

安全校验(1)-过滤器

如果你想查看实际效果,可以通过debug方式,并且一直追溯调用栈

安全校验(1)-过滤器

原文  https://segmentfault.com/a/1190000022418995
正文到此结束
Loading...