春天安全用户详细信息

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安全主体用户已更改为新登录的用户详细信息

OAuth2用户详细信息未在春季安全(SpringBoot)中更新

SPRING:向Spring安全用户添加自定义用户详细信息

通过 Spring Security 和 CAS 登录后,如何在非安全 JSP 页面上显示登录用户详细信息?