0

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

1 回答 1

3

HttpServletRequest#getRemoteUser()在 JSF 上下文中由ExternalContext#getRemoteUser().

因此,这应该在视图中执行:

<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废话,只使用 plain<form>而不是<h:form>.

<form id="login" action="j_security_check">

这样它也可以在禁用 JS 的客户端上工作。

也可以看看:

于 2014-02-04T07:39:25.443 回答