Shiro获取登录人数据
基本信息
-
principals/身份
principals:身份,即主体的标识属性,如用户名、邮箱等,确保唯一即可。 -
credentials/证明
credentials:证明/凭证,即只有主体知道的安全值,如密码/数字证书等。
最常见的principals和credentials组合就是用户名/密码了。
使用
- 存储登陆人数据
核心为SimpleAuthenticationInfo
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token)
throws AuthenticationException {
xxx
return new SimpleAuthenticationInfo(user, accessToken, getName());
}
该构造方法有三个参数
public SimpleAuthenticationInfo(Object principal, Object credentials, String realmName) {
this.principals = new SimplePrincipalCollection(principal, realmName);
this.credentials = credentials;
}
- principal: 可以放用户名一类的,但实际中更多为存储一个用户对象
- credentials:放密码,token之类的唯一登录标志
- realmName:名字
具体例子如下:
@Component
public class OAuth2Realm extends AuthorizingRealm {
@Override
public boolean supports(AuthenticationToken token) {
return token instanceof OAuth2Token;
}
/**
* 授权(验证权限时调用)
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
xxx
return info;
}
/**
* 认证(登录时调用)
*/
@Transactional(rollbackFor = Throwable.class)
@Override
// cas server认证成功,返回给前端token后,前端会再调用一次登录接口(/sys/user/ping),把拿到的token传进来
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token)
throws AuthenticationException {
xxx
return new SimpleAuthenticationInfo(user, accessToken, getName());
}
private URI getServiceValidateUri(String accessToken) {
xxx
}
}
- 获取登陆人数据
(具体的用户类)SecurityUtils.getSubject().getPrincipal();