principals:身份,即主体的标识属性,可以是任何东西,如用户名、邮箱等,唯一即可。

credentials:证明/凭证,即只有主体知道的安全值,如密码/数字证书等。

身份认证流程:

1)首先调用Subject.login(token)进行登录,其会自动委托给SecurityManager,调用之前 必须通过SecurityUtils.setSecurityManager()设置;

2)SecurityManager负责真正的身份验证逻辑;它会委托给Authenticator进行身份验证;

3)Authenticator才是真正的身份验证者,shiro api中核心的身份认证入口点,此处可以自 定义插入自己的实现;

4)Authenticator可能会委托给相应的AuthenticationStrategy进行多Realm身份验证,默 认ModularRealmAuthenticator会调用AuthenticationStrategy进行多Realm身份验证;

5)Authenticator会把相应的token传入Realm,从Realm获取身份验证信息,如果没有返 回/抛出异常表示身份验证失败了。此处可以配置多个Realm,将按照相应的顺序及策略进行 访问。

6)Authenticator的职责是验证用户账号,是shiro api中身份验证核心的入口点。

7)AuthenticationStrategy 认证策略 ModularRealmAuthenticator默认使用 AtLeastOneSuccessfulStrategy策略

1> FirstSuccessfulStrategy:只要有一个Realm验证成功即可,只返回第一个Realm身份验 证成功的认证信息,其他的忽略;

2> AtLeastOneSuccessfulStrategy:只要有一个Realm验证成功即可,和 FirstSuccessfulStrategy不同,返回所有Realm身份验证成功的认证信息;

3> AllSuccessfulStrategy:所有Realm验证成功才算成功,且返回所有Realm身份验证成功 的认证信息,如果有一个失败就失败了。