如何更新Shiro

时间:2015-07-29 13:37:57

标签: security authentication jsf-2 shiro

我在JSF2项目中使用Shiro 1.2.3。我没有办法在没有注销的情况下更新经过身份验证的主题的主体。当登录用户想要更新他/她的个人资料信息时,我需要这个。我存储userBean作为主体,它应该与个人资料信息一起更新。以编程方式登录可以是一种解决方案,但是创建令牌需要用户的密码。

1 个答案:

答案 0 :(得分:0)

一些时间过去了,但我希望这对其他人也有用。

当您使用Shiro登录时,会创建一个会话并将令牌发送给客户端以进行进一步的请求。

对于每个请求Shiro拦截HTTP请求,验证令牌是否有效,然后使用 org.apache.shiro.web.mgt.DefaultWebSubjectFactory.createSubject(SubjectContext context)方法创建一个新的Subject包含重要的一行

PrincipalCollection principals = wsc.resolvePrincipals();

这最终使我们进入了包含关键行的解决方法 org.apache.shiro.subject.support.DefaultSubjectContext.resolvePrincipals()

Session session = resolveSession();
if (session != null) {
    principals = (PrincipalCollection) session.getAttribute(PRINCIPALS_SESSION_KEY);
}

这是要更新主题的负责人而无需注销,您需要更新其会话的PRINCIPALS_SESSION_KEY属性。总结您的代码可能很简单

PrincipalCollection pc = (PrincipalCollection) getSubject().getSession().getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY;
// do something in here   
getSubject().getSession().setAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY, pc);
相关问题