在流程图3中,有Authenticator和AuthenticationStrategy2个接口。
Authenticator的职责是验证用户帐号,是Shiro API中身份验证核心的入口点:
它只有一个方法:
public AuthenticationInfo authenticate(AuthenticationToken authenticationToken)
throws AuthenticationException;
如果验证成功,将返回AuthenticationInfo验证信息;此信息中包含了身份及凭证;如果验证失败将抛出相应的AuthenticationException实现。
Shiro 主要有四个组件
SecurityManager
典型的 Facade,Shiro 通过它对外提供安全管理的各种服务。
Authenticator
对“Who are you ?”进行核实。通常涉及用户名和密码。
这 个组件负责收集 principals 和 credentials,并将它们提交给应用系统。如果提交的 credentials 跟应用系统中提供的 credentials 吻合,就能够继续访问,否则需要重新提交 principals 和 credentials,或者直接终止访问。
Authorizer
身 份份验证通过后,由这个组件对登录人员进行访问控制的筛查,比如“who can do what”, 或者“who can do which actions”。Shiro 采用“基于 Realm”的方法,即用户(又称 Subject)、用户组、角色和 permission 的聚合体。
Session Manager
这个组件保证了异构客户端的访问,配置简单。它是基于 POJO/J2SE 的,不跟任何的客户端或者协议绑定。
身份认证流程图的描述:
SecurityManager接口继承了Authenticator,另外还有一个ModuleRealmAuthenticator实现,其委托给多个Realm进行验证,验证规则听过AuthenticationStrategy接口指定,默认提供的实现
FirstSuccessfulStrategy:只要有一个Realm验证成功即可,只返回第一个Realm身份验证成功的认证信息,其他的忽略
AtLeastOneSuccessfulStrategy:只要有一个Realm验证成功即可,和FirstSuccessfulStrategy不同,返回所有Realm身份验证从的认证信息
AllSuccessfulStrategy:所有Realm验证成功才算成功,且返回所有Realm身份验证成功的认证信息,如果有一个失败就失败了
ModularRealmAuthenticator默认使用AtLeastOneSuccessfulStrategy策略。