美文网首页
SpringBoot使用Filter和DelegatingFil

SpringBoot使用Filter和DelegatingFil

作者: Kylin824 | 来源:发表于2021-07-06 00:54 被阅读0次

    Filter作用:对web请求进行拦截,通过一定的验证再决定是否放行访问系统。

    一、实现Filter

    1. 自定义Filter类继承Servlet包中的Filter接口,在doFilter()方法中实现自定义逻辑
    2. 配置Filter(这里采用手动配置,另一种方式是使用@WebFilter注解自动配置)
      这里拦截了"/hello"的请求,启动项目后访问localhost/hello可以看到控制台输出:

    这样就实现了一个简单的Filter功能。

    接下来尝试在刚刚的Filter中注入一个Spring Bean,这里用UserService来注入,并调用其getUser()方法。

    UserService的实现如下: 注入刚才的Filter,并在doFIlter()中调用其getUser()方法:

    再次测试localhost/hello,发现报错:


    说明这时候的Filter不能注入Bean,原因是这个Filter来自Servlet包,并不是由Spring管理的,因此初始化的时间早于Bean注入的时间, 因此会出错,这个时候就轮到 DelegatingFilterProxy 出场了。

    二、实现能够注入Bean的Filter

    话不多说直接上代码。

    1. 与上文一样,Filter的内容不需要修改,同样注入UserService
    2. 重新配置Filter(这里仍然采用手动配置,区别在于使用了 DelegatingFilterProxy

    为了对比注释保留了第一种的配置。

    再次测试localhost/hello,成功!

    说明这时候的Filter已经能够注入Bean。这样就 方便我们在Filter的逻辑中使用Spring容器中的Bean 了。

    Ref:
    spring boot过滤器FilterRegistrationBean
    GenericFilterBean与DelegatingFilterProxy
    Filter代理DelegatingFilterProxy

    相关文章

      网友评论

          本文标题:SpringBoot使用Filter和DelegatingFil

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