Spring Security源码解析(六)

如何自定义过滤器

自定义过滤器需要继承GenericFilterBean,然后实现doFilter方法。

然后在configure(HttpSecurity http)中,调用addFilterBefore、addFilterAfter、addFilter、addFilterAt将自定义的过滤器注入到默认过滤器中。

以addFilterBefore为例,addFilterBefore的主要功能是将自定义的过滤器添加到指定过滤器之前。接下来看看,它是如何实现的吧!

 

以上只是在FilterComparator的filterToOrder集合里,在指定的过滤器前注入了自定义的过滤器。我们之前的源码也分析过,FilterComparator只是一个比较器,类似于声明,只有在FilterComparator里面定义过的过滤器,才能添加到HttpSecurity的filters集合中,实现真正的过滤。

GenericFilterBean是什么

自定义过滤器需要继承GenericFilterBean,那什么是GenericFilterBean呢?

GenericFilterBean是SpringMVC提供的过滤器的基本实现,可以看到GenericFilterBean实现了很多的接口,Filter接口标志这个类可以作为过滤器使用、ServletContextAware获取Servlet容器上下文等。

GenericFilterBean作为过滤器的实现,最主要的就是init方法。GenericFilterBean对Filter的init方法进行了重写,最主要的功能就是获取到web.xml中配置的<init-param>标签的值,并设置为bean的属性。 

从上面两张图可以看到,GenericFilterBean的子类如果调用了addRequiredProperty方法,添加了需要加载的属性值,后续就可以从ServletContext中获取到对应的init-param的值,赋值给对应的bean属性。如果没有调用addRequiredProperty方法添加需要加载的属性值,那么就不会从ServletContext中获取init-param。

后续它们都会去调用initFilterBean方法,这个方法是由子类去实现的,像DelegatingFilterProxy就实现了initFilterBean方法。

总结来说就是GenericFilterBean可以获取到web.xml中配置的<init-param>标签的值,同时也提供了统一的destory方法(destory方法就暂不做分析了,有兴趣的可以自己了解下)。

而我们采用继承GenericFilterBean的方式来创建自定义的过滤器,其实如果不需要获取web.xml中配置的<init-param>标签的值,也可以采用实现Filter接口的方式来自定义过滤器!

 [完]

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Security 是一个功能强大且广泛使用的安全框架,用于保护 Java 应用程序的身份验证和授权。它提供了一套全面的安全解决方案,包括认证、授权、攻击防护等功能。 Spring Security源码是开源的,可以从官方仓库(https://github.com/spring-projects/spring-security)获取到。在源码中,主要包含以下几个关键模块: 1. 核心模块(Core):提供了基本的认证和授权功能,包括用户身份认证、访问控制等。核心模块的源码位于 `spring-security-core` 包下。 2. Web 模块(Web):提供了与 Web 应用程序集成的相关功能,如基于 URL 的授权、Web 表单登录、记住我功能等。Web 模块的源码位于 `spring-security-web` 包下。 3. 配置模块(Config):提供了基于 Java 配置和 XML 配置的方式来配置 Spring Security。配置模块的源码位于 `spring-security-config` 包下。 4. 测试模块(Test):提供了用于测试 Spring Security 的工具和辅助类。测试模块的源码位于 `spring-security-test` 包下。 在源码中,你可以深入了解 Spring Security 的内部工作原理、各个组件之间的协作关系以及具体的实现细节。可以通过跟踪调试源码,了解每个功能是如何实现的,从而更好地理解和使用 Spring Security。 请注意,Spring Security源码是非常庞大且复杂的,需要一定的时间和精力去深入研究。建议在阅读源码之前,先对 Spring Security 的基本概念和使用方法有一定的了解,这样会更有助于理解源码中的内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值