Spring Shiro基础组件 AuthorizationInfo

相关阅读

简介

表示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

简介

同时继承AuthenticationInfoAuthorizationInfo接口,表示单个Realm中单个账户的鉴权和授权;

核心方法

SimpleAccount

简介

Account的简单实现,内部使用SimpleAuthenticationInfoSimpleAuthorizationInfo实例实现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);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值