认证流程
- subject提交认证,传过去token参数
- DelegatingSubject代理类调用securityManager.login(this,token),此方法会通过token查询,获取到一个subject,接下来会对这个subject进行检查,如果没有问题,就把subject的内容塞入到this中,也就是当前调用认证方法的那个subject中,完成副作用。
- DefaultSecurityManager的login方法拿到subject和token参数后,调用父类的方法:authenticate(token)来获取到一个认证信息AuthenticationInfo。接下来会调用createSubject方法,把AuthenticationInfo、token和subject重新组装成一个新的subject,返回。
- AuthenticatingSecurityManager方法中的authenticate(token)方法接收到token后,执行操作,return this.authenticator.authenticate(token)。authenticator在new的时候就自动创建完成,为ModularAuthenticator,返回一个认证信息AuthenticationInfo。
- AbstractAuthenticator方法中会有一个方法info = doAuthenticate(token),来获取认证信息,ModularAuthenticator方法中写了这个。
- ModularAuthenticator方法继承了抽象类AbstractAuthenticator,拿到token后去realm里查询用户的认证信息,自定义的realm就在这里的集合中,通过注入的方式加入集合,也可以配置认证的三个策略。自定义的realm覆盖重写doGetAuthenticationInfo方法。
subject.login(token)
|
|
DelegatingSubject
subject的代理类。
|
|
DefaultSecurityManager
这是一个默认的安全管理器。
AuthenticatingSecurityManager
|
|
AbstractAuthenticator
|
|
ModularRealmAuthenticator
|
|
注意的是,ModularRealmAuthenticator中的realm,是有set方法的,在spring中直接通过配置文件注入的方式set进来即可。
多个realm的配置方法
其中也有三种不同的realm认证策略,基本上都是针对多个realm配置的情况。
|
|
ini配置方法
|
|
spring注入的方法
|
|