shiro使用clearCachedAuthenticationInfo无法清除认证信息

使用this.clearCachedAuthenticationInfo(),传入了令牌,同样执行this.clearCachedAuthorizationInfo()操作可以将授权信息清空,以上两项操作都是传入的一样的principals,在Debug中发现执行到clearCachedAuthenticationInfothis.getAvailableAuthenticationCache()的返回值为NULL:
图片描述

还请大神解答。

阅读 5.9k
2 个回答

目前代替方案:

public void clearAuthByUserId(String uid,Boolean author, Boolean out){
    //获取所有session
    Collection<Session> sessions = redisSessionDAO.getActiveSessions();
    for (Session session:sessions){
        //获取session登录信息。
        Object obj = session.getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY);
        if(obj instanceof SimplePrincipalCollection){
            //强转
            SimplePrincipalCollection spc = (SimplePrincipalCollection)obj;
            SysUser user = new SysUser();
            BeanUtils.copyProperties(spc.getPrimaryPrincipal(),user);
            //判断用户,匹配用户ID。
            if(uid.equals(user.getId())){
                if(author)
                    this.clearCachedAuthorizationInfo(spc);
                if(out){
                    redisSessionDAO.delete(session);
                }
            }
        }
    }
}
新手上路,请多包涵

你需要确认下AuthenticatingRealm类中如下的内容存入的是什么。。
图片描述

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题