①应用程序代码调用 Subject。login 方法,传递创建好的包含终端用户的 Principals(身份)和 Credentials(凭证)的 AuthenticationToken 实例
②Subject 实例:通常为 DelegatingSubject(或子类)委托应用程序的 SecurityManager 通过调用securityManager。login(token) 开始真正的验证。
③SubjectManager 接收 token,调用内部的 Authenticator 实例调用 authenticator。authenticate(token)。Authenticator 通常是一个 ModularRealmAuthenticator 实例, 支持在身份验证中协调一个或多个Realm 实例
④如果应用程序中配置了一个以上的 Realm, ModularRealmAuthenticator 实例将利用配置好的AuthenticationStrategy 来启动 Multi-Realm 认证尝试。 在Realms 被身份验证调用之前, 期间和以后,AuthenticationStrategy 被调用使其能够对每个Realm 的结果作出反应。
⑤每个配置的 Realm 用来帮助看它是否支持提交的 AuthenticationToken。 如果支持, 那么支持 Realm 的 getAuthenticationInfo 方法将会伴随着提交的 token 被调用。 getAuthenticationInfo 方法有效地代表一个特定 Realm 的单一的身份验证尝试。
![](https://img2024.cnblogs.com/blog/35695/202408/35695-20240826070647288-243310440.jpg)