我有简单的页面,我想检索j_username
以将其作为登录用户保存在会话中,我无法从表单中获取它。这是服务器自动执行此代码中的身份验证
<h:form id="login" onsubmit="document.getElementById('login').action='j_security_check';" prependId="false">
<h:panelGrid columns="2">
<p:outputLabel for="j_username" value="Username" />
<p:inputText id="j_username" name="j_username"/>
<p:outputLabel for="j_password" value="Password" />
<p:password id="j_password" name="j_password" value=""/>
<p:commandButton style="font-size:15px" type="submit" value="Login" ajax="false"/>
<p:commandButton style="font-size:15px" type="clear" value="Clear" ajax="false"/>
</h:panelGrid>
</h:form>
答案 0 :(得分:1)
由HttpServletRequest#getRemoteUser()
提供,它位于ExternalContext#getRemoteUser()
委派的JSF上下文中。
所以,这应该在视图中进行:
<ui:fragment rendered="#{empty request.remoteUser}">
<p>This is only rendered when someone's NOT logged in.</p>
</ui:fragment>
<ui:fragment rendered="#{not empty request.remoteUser}">
<p>This is only rendered when someone's been logged in.</p>
<p>Welcome, you're logged in as #{request.remoteUser}!</p>
</ui:fragment>
或在托管bean中:
ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
String username = ec.getRemoteUser();
// ...
无关:最好摆脱onsubmit
废话,只使用普通<form>
代替<h:form>
。
<form id="login" action="j_security_check">
这样它也适用于JS禁用的客户端。