【问题标题】: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 中 谢谢

【问题讨论】:

  • 你能把代码贴在你放置用户栏的地方吗?
  • 我编辑了帖子请看

标签: jsf-2 primefaces spring-security


【解决方案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】:

已通过在单独的安全页面中设置信息栏“仅在登录后显示”来解决此问题

【讨论】:

    猜你喜欢
    • 2017-01-01
    • 2017-10-29
    • 2012-04-03
    • 2017-10-02
    • 2019-07-02
    • 2020-09-13
    • 2019-03-08
    • 1970-01-01
    • 2013-03-15
    相关资源
    最近更新 更多