在j_security_check JSF 2.0中获取j_username

时间:2014-02-04 07:33:22

标签: jsf-2 username j-security-check

我有简单的页面,我想检索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>

1 个答案:

答案 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禁用的客户端。

另见: