gpt4 book ai didi

security - 如何在 Shiro 中更新经过身份验证的主体的主体

转载 作者:行者123 更新时间:2023-12-03 20:20:20 25 4
gpt4 key购买 nike

我在 JSF2 项目中使用 Shiro 1.2.3。我找不到一种无需注销即可更新经过身份验证的主体的方法。当登录用户想要更新他/她的个人资料信息时,我需要这个。我存了一个 userBean作为主体,它应该与配置文件信息一起更新。以编程方式登录可能是一种解决方案,但这次需要用户的密码来创建 token 。

最佳答案

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

当您使用 Shiro 登录时,会创建一个 session ,并向客户端发送 token 以供进一步请求。

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

PrincipalCollection principals = wsc.resolvePrincipals();

最终将我们带到解决方法 org.apache.shiro.subject.support.DefaultSubjectContext.resolvePrincipals() 其中包含关键行
Session session = resolveSession();
if (session != null) {
principals = (PrincipalCollection) session.getAttribute(PRINCIPALS_SESSION_KEY);
}

也就是说,要在不注销的情况下更新主题的主体,您需要更新他/她的 session 的 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);

关于security - 如何在 Shiro 中更新经过身份验证的主体的主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31702084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com