相关阅读
- Spring Shiro流程简析 登录请求处理
- Spring Shiro基础组件 AuthenticationToken
- Spring Shiro基础组件 Authenticator
- Spring Shiro基础组件 Realm
简介
表示Subject
存储的访问控制过程中的授权信息(角色,权限等);
角色信息一般是一个字符串集合,集合中每个元素表示为角色名称;
权限信息可以是一个权限集合,也可以是一个权限字符串集合,亦或是二者兼有,Subject
拥有的权限信息为二者之和;
核心方法
/**
* 返回分配给Subject的所有角色的名称
*/
Collection<String> getRoles();
/**
* 返回分配给Subject的所有权限字符串
*/
Collection<String> getStringPermissions();
/**
* 返回分配给Subject的所有类型安全的权限
*/
Collection<Permission> getObjectPermissions();
实现子类
public interface AuthorizationInfo extends Serializable
public class SimpleAuthorizationInfo implements AuthorizationInfo
public interface Account extends AuthenticationInfo, AuthorizationInfo
public class SimpleAccount implements Account, MergableAuthenticationInfo, SaltedAuthenticationInfo, Serializable
SimpleAuthorizationInfo
简介
AuthorizationInfo
的简单实现,内部使用Set
存储角色名称、权限字符串、权限;
核心方法
protected Set<String> roles;
protected Set<String> stringPermissions;
protected Set<Permission> objectPermissions;
/**
* 返回分配给Subject的所有角色的名称
*/
public Set<String> getRoles() {
return roles;
}
/**
* 返回分配给Subject的所有权限字符串
*/
public Set<String> getStringPermissions() {
return stringPermissions;
}
/**
* 返回分配给Subject的所有类型安全的权限
*/
public Set<Permission> getObjectPermissions() {
return objectPermissions;
}
Account
简介
同时继承AuthenticationInfo
和AuthorizationInfo
接口,表示单个Realm
中单个账户的鉴权和授权;
核心方法
无
SimpleAccount
简介
Account
的简单实现,内部使用SimpleAuthenticationInfo
和SimpleAuthorizationInfo
实例实现Account接口;
核心方法
// 鉴权信息,实现AuthenticationInfo接口
private SimpleAuthenticationInfo authcInfo;
// 授权信息,实现AuthorizationInfo接口
private SimpleAuthorizationInfo authzInfo;
// 账户锁定标识
private boolean locked;
// 账户过期标识
private boolean credentialsExpired;
/**
* 构造方法
*/
public SimpleAccount(PrincipalCollection principals, Object credentials) {
// 鉴权信息
this.authcInfo = new SimpleAuthenticationInfo(principals, credentials);
// 授权信息
this.authzInfo = new SimpleAuthorizationInfo();
}
/**
* 获取锁定标识
*/
public boolean isLocked() {
return locked;
}
/**
* 设置锁定标识
*/
public void setLocked(boolean locked) {
this.locked = locked;
}
/**
* 获取过期标识
*/
public boolean isCredentialsExpired() {
return credentialsExpired;
}
/**
* 设置过期标识
*/
public void setCredentialsExpired(boolean credentialsExpired) {
this.credentialsExpired = credentialsExpired;
}
public void merge(AuthenticationInfo info) {
// 合并鉴权信息
authcInfo.merge(info);
// Merge SimpleAccount specific info
if (info instanceof SimpleAccount) {
// 合并SimpleAccount的锁定和过期标识
SimpleAccount otherAccount = (SimpleAccount) info;
if (otherAccount.isLocked()) {
setLocked(true);
}
if (otherAccount.isCredentialsExpired()) {
setCredentialsExpired(true);
}
}
}