Closed IMetaNFT closed 6 years ago
经测试未发现该问题:
UserInfo类:
public class UserInfo implements Serializable, AuthCachePrincipal{
private String username;
private Integer age;
// 省略setter和 getter
@Override
public String getAuthCacheKey() {
return getUsername();
}
}
以下是登陆代码
@Override
protected AuthenticationInfo doGetAuthenticationInfo(
AuthenticationToken token) throws AuthenticationException {
UsernamePasswordToken usernamePasswordToken = (UsernamePasswordToken)token;
UserInfo userInfo = new UserInfo();
return new SimpleAuthenticationInfo(userInfo, "123456", getName());
}
以下是授权代码
@Override
protected AuthorizationInfo doGetAuthorizationInfo(
PrincipalCollection principals) {
Subject subject = SecurityUtils.getSubject();
//取出UserInfo
UserInfo dbUser = (UserInfo) subject.getPrincipal();
代码可以在 https://github.com/alexxiyang/shiro-redis-tutorial 找到。 该示例项目运行条件: Redis: 192.168.56.101:6379
你可以修改 shiro.ini 中的地址
@Chenyobing 我也遇到了和你一样的问题,你解决了吗?怎么解决的?
这个周末我会发布3.1.0在该版本中,使用反射获取authCacheKey,不需要实现 AuthCachePrincipal 。希望可以解决你们的问题
shiro原理还不太熟悉,能简单说下SimpleAuthenticationInfo这个类构造器的第一个参数principal和doGetAuthorizationInfo这个方法的参数的意义吗?转型错误的原因是什么?
请升级至 3.1.0,该版本舍弃了 AuthCachePrincipal,使用反射机制获取id字段。请设定 cacheManager.principalIdFieldName
使用的SpringBoot 1.5.8 shiro-spring 1.4.0
实体类
realm 认证回传 simpleAuthenticationInfo
然后授权获取 User dbUser = (User) subject.getPrincipal(); 时出现类型转换失败。