Servlets jsf2.0登录&x2B;设置用户主体

Servlets jsf2.0登录&x2B;设置用户主体,servlets,jsf-2,login,Servlets,Jsf 2,Login,我正在尝试使用JSF2.0表单对用户进行身份验证。 我还想创建UserPrincipals。 我认为使用HttpServletRequest.login方法可以创建一个新的UserPrincipal。 我所做的是: 公式: <h:form> <h:outputLabel value="Name" for="name"/> <h:inputText id="name" value="#{userMng.user.name }"

我正在尝试使用JSF2.0表单对用户进行身份验证。 我还想创建UserPrincipals。 我认为使用HttpServletRequest.login方法可以创建一个新的UserPrincipal。

我所做的是:

公式:

    <h:form>
        <h:outputLabel value="Name" for="name"/>
        <h:inputText id="name" value="#{userMng.user.name }"/>
        <br/>
        <h:outputLabel value="Passwort" for="pw"/>
        <h:inputSecret id="pw" value="#{userMng.user.password }"/>
        <br/>
        <h:commandButton type="submit" value="Submit" action="#{ userMng.login }"/>
    </h:form>
但是,当我想在登录后打印UserPrincipal.getName时,当我调用:

request.getUserPrincipal().getName();
那么,我的代码或在成功登录后创建新UserPrincipal的方法有什么问题


最佳

用户主体仅在登录后的后续请求中可用。您需要在登录后发送重定向以强制浏览器创建新请求

ret = "success?faces-redirect=true";
在视图中打印用户名时,最好使用EL。通过
#{request}
已经可以使用EL中的

<p>Welcome #{request.userPrincipal.name}!</p>
欢迎#{request.userPrincipal.name}

或者只是捷径

<p>Welcome #{request.remoteUser}!</p>
欢迎#{request.remoteUser}


当我执行ret=“success?faces redirect=true”时;我的导航规则不起作用。JSF没有重定向到success页面,而且似乎login方法没有创建新主体。当我想在请求后在登录方法中打印UserPrincipal时,UserPrincipal也是空对象。loginOh您仍然在使用老式的XML导航规则吗?在那里放一个
,或者用隐式导航替换所有这些导航规则,如
“viewId”
,如
“viewId?faces redirect=true”
。是的,我使用XML导航规则?更好的方法是什么?:)但是UserPrincipal的问题仍然存在?另外,当我想在登录方法中打印UserPrincipal时。。
<p>Welcome #{request.remoteUser}!</p>