在刷新页面之前,JSF不会显示用户名

问题描述

我的java ee8项目是在开放式自由上部署的,我正在尝试使用开放式自由的基本注册表来配置安全性。我有两个用户设置了Bob和Dave。

当Bob或Dave使用chrome的基本身份验证登录到应用程序时,我的应用程序会很好地加载联系人列表。但是它不会显示登录用户名称

如果我只是刷新页面,那么两者都可以。

<h:body>
 <h:form>
  <header>
   <h4 style="float:right">Hello,#{usersession.loggedUser.userName.name}</h4>
  </header>
  <div>
   <p:selectOneMenu class="cannedFilter" value="#{dataView.selectedContactId}">
     <f:selectItems value="#{dataView.loggedUsersContactList}" var="userContact" itemLabel="#{userContact.name}" itemValue="#{userContact.id}"/>
   </p:selectOneMenu>
  </div>
 </h:form>
</h:body>
@Named(value = "usersession")
@SessionScoped
public class UserSession implements Serializable {
    private User loggedUser;
    
    @Inject
    private UserHelper userhelper;
    @Inject
    private SecurityContext securityContext;

    public User getLoggedUser() {
        Principal callerPrincipal = securityContext.getCallerPrincipal();
        
        if(callerPrincipal == null) {
            System.out.println("User is not logged in yet");
            return null;
        }
        
        System.out.println("User is logged in: "+callerPrincipal.getName());
        
        loggedUser = userhelper.getUser(callerPrincipal.getName());
        return loggedUser;
    }

    public void setLoggedUser(User loggedUser) {
        this.loggedUser = loggedUser;
    }
}
@RequestScoped
@Named(value = "dataView")
public class DataView implements Serializable {
    @Inject
    private UserSession userSession;

    public List<Contact> getLoggedUsersContactList() {
        if(userSession.getLoggedUser.getName().equals("Bob")){
            return bobsContactList();
        } else if(userSession.getLoggedUser.getName().equals("Dave")){
            return davesContactList();
        } else {return null;}
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)