春天安全用户详细信息
Posted
技术标签:
【中文标题】春天安全用户详细信息【英文标题】:spring security User details 【发布时间】:2014-02-25 13:11:47 【问题描述】:我的应用程序是使用 jsf2 、 primefaces 和 spring 开发的 我想在页面上方添加用户详细信息栏
此栏将包含字符串 hello User, 此栏仅在用户登录时出现
我的问题是当再次访问该应用程序时,我看到栏,而没有执行记录过程
有什么建议吗?
可见设置栏代码为:
public String login()
boolean success = authenticationService.login(mail, password);
if (success)
signedIn = true;
User user = (User) SecurityContextHolder.getContext()
.getAuthentication().getPrincipal();
String name = user.getUsername(); // get logged in username
System.out.println(">>>>>>>>> login "+name);
setName(name);
return "facultyRating"; // return to
// application
// but being
// logged now
else
signedIn = false;
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage("Login or password incorrect."));
return "/pages/securityLogin.xhtml/loginPage.xhtml";
此方法存在于从中读取“包含用户信息栏”的 Jsf2 页面的 bean 中 谢谢
【问题讨论】:
你能把代码贴在你放置用户栏的地方吗? 我编辑了帖子请看 【参考方案1】:假设登录方法是会话范围的托管 bean 的一部分,您可以使用 signedIn 属性来确定是否使用组件的渲染属性来显示菜单栏。
类似于以下内容:
<h:form id="menuForm">
<p:menubar rendered="#authMBean.signedIn">...</p:menubar>
</h:form>
登录方法还应该更新放置用户栏的表单,以便在登录成功时显示它。
org.primefaces.context.RequestContext.getCurrentInstance().update(":menuForm");
【讨论】:
我的问题是,当其他用户访问应用程序时,此属性仍然为真,但我在 @postconstruct 方法 signedIn=false 时这样做了;为什么当其他用户与当前用户访问应用程序并发时不调用此方法 可能是范围问题。当另一个用户登录时,您可能没有获得该类的新实例。从该 bean 发布其余代码可能是个好主意。【参考方案2】:已通过在单独的安全页面中设置信息栏“仅在登录后显示”来解决此问题
【讨论】:
以上是关于春天安全用户详细信息的主要内容,如果未能解决你的问题,请参考以下文章
会话创建和会话销毁事件中的 Spring 安全访问用户详细信息
Spring Boot安全主体用户已更改为新登录的用户详细信息