spring boot中的WebSecurityConfigurerAdapter继承关系怎么理解


这篇文章主要讲解了“spring boot中的WebSecurityConfigurerAdapter继承关系怎么理解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“spring boot中的WebSecurityConfigurerAdapter继承关系怎么理解”吧!我们先来看一张 WebSecurityConfigurerAdapter 的继承关系图:在这层继承关系中,有两个非常重要的类:WebSecurityConfigurer 其实是一个空接口,但是它里边约束了一些泛型,如下:这里边的泛型很关键,这关乎到 WebSecurityConfigurer 的目的是啥!同时这里还定义了新的泛型 T,T 需要继承自 SecurityBuilder,根据 WebSecurityConfigurerAdapter 中的定义,我们可以知道,T 就是 WebSecurity,我们也大概能猜出 WebSecurity 就是 SecurityBuilder的子类。所以 WebSecurityConfigurer 的目的我们可以理解为就是为了配置 WebSecurity。我们来看下 WebSecurity 的定义:没错,确实是这样!WebSecurity 继承自 AbstractConfiguredSecurityBuilder 同时实现了 SecurityBuilder接口。WebSecurity 的这些接口和继承类。Abstr 香港云主机actConfiguredSecurityBuilder首先 AbstractConfiguredSecurityBuilder 中定义了一个枚举类,将整个构建过程分为 5 种状态,也可以理解为构建过程生命周期的五个阶段,如下:五种状态分别是 UNBUILT、INITIALIZING、CONFIGURING、BUILDING 以及 BUILT。另外还提供了两个判断方法,isInitializing 判断是否正在初始化,isConfigured 表示是否已经配置完毕。AbstractConfiguredSecurityBuilder 中的方法比较多,松哥在这里列出来两个关键的方法和大家分析:第一个就是这个 add 方法,这相当于是在收集所有的配置类。将所有的 xxxConfigure 收集起来存储到 configurers 中,将来再统一初始化并配置,configurers 本身是一个 LinkedHashMap ,key 是配置类的 class,value 是一个集合,集合里边放着 xxxConfigure 配置类。当需要对这些配置类进行集中配置的时候,会通过 getConfigurers 方法获取配置类,这个获取过程就是把 LinkedHashMap 中的 value 拿出来,放到一个集合中返回。另一个方法就是 doBuild 方法。在 AbstractSecurityBuilder 类中,过滤器的构建被转移到 doBuild 方法上面了,不过在 AbstractSecurityBuilder 中只是定义了抽象的 doBuild 方法,具体的实现在 AbstractConfiguredSecurityBuilder。doBuild 方法就是一边更新状态,进行进行初始化。beforeInit 是一个预留方法,没有任何实现。init 方法就是找到所有的 xxxConfigure,挨个调用其 init 方法进行初始化。beforeConfigure 是一个预留方法,没有任何实现。configure 方法就是找到所有的 xxxConfigure,挨个调用其 configure 方法进行配置。最后则是 performBuild 方法,是真正的过滤器链构建方法,但是在 AbstractConfiguredSecurityBuilder 中 performBuild 方法只是一个抽象方法,具体的实现在它的子类中,也就是 WebSecurityConfigurer。SecurityBuilderSecurityBuilder 就是用来构建过滤器链的,在 HttpSecurity 实现 SecurityBuilder 时,传入的泛型就是 DefaultSecurityFilterChain,所以 SecurityBuilder#build 方法的功能很明确,就是用来构建一个过滤器链出来,但是那个过滤器链是 Spring Security 中的。在 WebSecurityConfigurerAdapter 中定义的泛型是 SecurityBuilder,所以最终构建的是一个普通 Filter,其实就是 FilterChainProxy。WebSecurityWebSecurity 的核心逻辑集中在 performBuild 构建方法上,我们一起来看下:先来说一句,这里的 performBuild 方法只有一个功能,那就是构建 FilterChainProxy。把握住了这条主线,我们再来看方法的实现就很容易了。从这段分析中,我们可以看出来 WebSecurity 和 HttpSecurity 的区别:这就是 WebSecurity 的主要作用,核心方法是 performBuild,其他方法都比较简单,就不一一解释了。最后我们再来看 WebSecurityConfigurerAdapter,由于 WebSecurityConfigurer 只是一个空接口,WebSecurityConfigurerAdapter 就是针对这个空接口提供一个具体的实现,最终目的还是为了方便你配置 WebSecurity。WebSecurityConfigurerAdapter 中的方法比较多,但是根据我们前面的分析,提纲挈领的方法就两个,一个是 init,还有一个 configure(WebSecurity web),其他方法都是为这两个方法服务的。那我们就来看下这两个方法:先看 init 方法:init 方法可以算是这里的入口方法了:首先调用 getHttp 方法进行 HttpSecurity 的初始化。HttpSecurity 的初始化,实际上就是配置了一堆默认的过滤器,配置完成后,最终还调用了 configure(http) 方法,该方法又配置了一些拦截器,不过在实际开发中,我们经常会重写 configure(http) 方法。HttpSecurity 配置完成后,再将 HttpSecurity 放入 WebSecurity 中,保存在 WebSecurity 的 securityFilterChainBuilders 集合里configure(WebSecurity web) 方法实际上是一个空方法,我们在实际开发中可能会重写该方法:感谢各位的阅读,以上就是“spring boot中的WebSecurityConfigurerAdapter继承关系怎么理解”的内容了,经过本文的学习后,相信大家对spring boot中的WebSecurityConfigurerAdapter继承关系怎么理解这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是开发云,小编将为大家推送更多相关知识点的文章,欢迎关注!

相关推荐: SAP MM 盘点凭证对于物料货物移动的冻结

1, Below is an open physical inventory document for storage location 3205 and material 390378021, VPSY1sFFFFIZW/5ef+2Q/nWLr+uz6Vdw…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 09/06 19:15
Next 09/06 19:42

相关推荐