实现过滤器只需要实现 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 Boot 项目之中注册过滤器可以通过以下几种方式:
注意:
/* ,而第二种方式你可以通过FilterRegistrationBean中的 setUrlPatterns 来设置拦截的Url @Order 注解指定在整个 应用过滤链 中的位置,第二种方式通过FilterRegistrationBean中的 setOrder 来设置 Spring Bean ,因此我们可以使用依赖注入。 上面提到的 应用过滤链 是位于各种过滤器链的顶端。你可能会说为什么会有 各种过滤器链 ,过滤器链不是只有一条吗?虽然在这篇文章的场景下只有一种过滤链,即应用过滤链,但是在使用spring security,shiro等类似框架时,他们往往是通过在 ApplicationFilterChain 先注册一个顶级过滤器,然后在这个过滤器中定义一条虚拟过滤器链,从而实现自己的过滤器链。实现的原理效果如下图所示:
如果你想查看实际效果,可以通过debug方式,并且一直追溯调用栈