Realm
- doGetAuthenticationInfo()和getAuthenticationInfo()一样,都是做用户验证和返回身份凭证的。
- 从调用链上,getAuthorizationInfo()会调用doGetAuthorizationInfo(),所以大部分时候是重写后者。
AuthenticationToken
收集用户提交的身份信息(如用户名和凭据(如密码))的接口。
public interface AuthenticationToken extends Serializable { Object getPrincipal(); //身份 Object getCredentials(); //凭据 };
- 扩展接口RememberMeAuthenticationToken:提供boolean isRememberMe()实现记住我功能。
- 扩展接口HostAuthenticationToken:提供String getHost()获取用户主机。
- 内置实现类UsernamePasswordToken:仅保存用户名、密码,并实现了以上两个接口,可以实现记住我和主机验证的支持。
AuthenticationInfo
- 封装验证通过的身份信息,主要包括Object属性principal(一般存储用户名)和credentials(密码)。
- MergableAuthenticationInfo子接口:在多Realm时合并AuthenticationInfo,主要合并Principal,如果是其他信息如credentialsSalt,则会后合并进来的AuthenticationInfo覆盖。
- SaltedAuthenticationInfo子接口:比如HashedCredentialsMatcher,在验证时会判断AuthenticationInfo是否是SaltedAuthenticationInfo的子类,是则获取其盐。
- Account子接口:相当于我们之前的[users],SimpleAccount是其实现。在IniRealm、PropertiesRealm这种静态创建账号的场景中使用,它们继承了SimpleAccountRealm,其中就有API用于增删查改SimpleAccount。适用于账号不是特别多的情况。
- SimpleAuthenticationInfo:一般都是返回这个类型。
PincipalCollection
- Principal前缀:应该是上面AuthenticationInfo的属性principal。
- PincipalCollection:是一个身份集合,保存登录成功的用户的身份信息。因为我们可以在Shiro中同时配置多个Realm,所以身份信息就有多个。可以传给doGetAuthorizationInfo()方法为登录成功的用户授权。