springboot 过滤器 总结

本文详细介绍了Spring框架中Web Filter的配置方法,包括如何通过注解实现过滤器的注册及注意事项,例如@ServletComponentScan与@WebFilter的使用,以及自定义过滤器的实现步骤。

filter:
1: 在启动类上加一个注解 @ServletComponentScan(basePackages=“需要扫描的过滤器”)
2: 新建myFilter 继承接口 Filter
3:在myFilter 上添加 @WebFilter(filterName=“过滤器名称” urlPatterns=“过滤规则” )
4:重写 三大方法 doFilter , init ,destroy

注意: 三个方法最好都重写一遍, 不要只重写 doFilter 方法。 在tomcat9.0一下版本部署可能失败。 因为有的tomcat内部父类组件 的三大方法有可能是普通方法。
详见:https://blog.csdn.net/ieen_csdn/article/details/86612492

注意: 在使用@WebFilter + @Order 时, Order是失效的。 过滤器执行顺序依然按照过滤器名称进行先后顺序的注册。

自定义过滤器类上注解可以使用的组合方式有:
@Component + @Order : 此时过滤器执行顺序排序是有效的, 但是过滤器不能指定拦截的url , 只能默认拦截全部
@WebFilter + @ServletComponentScan 此时 可以指定要拦截的url , 但是不能指定过滤器执行顺序
JavaConfig-FilterRegistrationBean(在启动类配置拦截器,此时自定义过滤器不加注解,为普通类即可) 可以指定过滤器要拦截的url 和 过滤器执行顺序, 但需要代码方式实现

注意: 过滤器中不能自动注入bean 对象。
因为过滤器执行顺序高于servlet , 在执行过滤器时bean对象还没有被实例化。
如果同时使用 @Component + @Order + @WebFilter + @ServletComponentScan , 同一个过滤器会被执行两次!

示例代码:
启动类:

@ServletComponentScan(basePackages = "com.diting.hb2.fastdevlop.commons.filter")

自定义过滤器:

@WebFilter(urlPatterns = "/*")
public class TestFilter01  implements Filter {

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("-----------执行过滤器01----------------");
        filterChain.doFilter(servletRequest ,servletResponse);
        System.out.println("-----------过滤器放行01----------------");
    }

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

    }

    @Override
    public void destroy() {

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值