深入理解 WebSecurityConfigurerAdapter【源码篇】

深入理解 WebSecurityConfigurerAdapter【源码篇】

码农世界 2024-06-04 前端 123 次浏览 0个评论

}

}

}

private Collection> getConfigurers() {

List> result = new ArrayList<>();

for (List> configs : this.configurers.values()) {

result.addAll(configs);

}

return result;

}

第一个就是这个 add 方法,这相当于是在收集所有的配置类。将所有的 xxxConfigure 收集起来存储到 configurers 中,将来再统一初始化并配置,configurers 本身是一个 LinkedHashMap ,key 是配置类的 class,value 是一个集合,集合里边放着 xxxConfigure 配置类。当需要对这些配置类进行集中配置的时候,会通过 getConfigurers 方法获取配置类,这个获取过程就是把 LinkedHashMap 中的 value 拿出来,放到一个集合中返回。

另一个方法就是 doBuild 方法。

@Override

protected final O doBuild() throws Exception {

synchronized (configurers) {

buildState = BuildState.INITIALIZING;

beforeInit();

init();

buildState = BuildState.CONFIGURING;

beforeConfigure();

configure();

buildState = BuildState.BUILDING;

O result = performBuild();

buildState = BuildState.BUILT;

return result;

}

}

private void init() throws Exception {

Collection> configurers = getConfigurers();

for (SecurityConfigurer configurer : configurers) {

configurer.init((B) this);

}

for (SecurityConfigurer configurer : configurersAddedInInitializing) {

configurer.init((B) this);

}

}

private void configure() throws Exception {

Collection> configurers = getConfigurers();

for (SecurityConfigurer configurer : configurers) {

configurer.configure((B) this);

}

}

在 AbstractSecurityBuilder 类中,过滤器的构建被转移到 doBuild 方法上面了,不过在 AbstractSecurityBuilder 中只是定义了抽象的 doBuild 方法,具体的实现在 AbstractConfiguredSecurityBuilder。

doBuild 方法就是一边更新状态

转载请注明来自码农世界,本文标题:《深入理解 WebSecurityConfigurerAdapter【源码篇】》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,123人围观)参与讨论

还没有评论,来说两句吧...

Top