1
我正在嘗試使用jsf 2.0表單來驗證用戶身份。 另外我想創建UserPrincipals。 我認爲用HttpServletRequest.login方法我可以創建一個新的UserPrincipal。 http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.htmlJSF 2.0登錄+設置用戶主體
我所做的是:
表現公式:
<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>
UserMng(sessionscoped): 登錄方法:
public String login() {
String ret = "error";
if (user.getName().equals("test") && user.getPassword().equals("test")) {
FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
try {
request.login(this.user.getName(), this.user.getPassword());
LOGGER.info("Login the user");
ret = "success";
// this.user = userDAO.find(this.username, this.password);
} catch (ServletException e) {
// Handle unknown username/password in request.login().
context.addMessage(null, new FacesMessage("Unknown login"));
}
}
LOGGER.info(ret);
return ret;
}
但是,當我要打印UserPrincipal.getName登錄後,當我打電話時,我得到一個NullpointerException:
request.getUserPrincipal().getName();
那麼,我的代碼或我的方式來成功登錄後創建一個新的UserPrincipal最新怎麼了?
最好
當我做RET = 「成功的面孔重定向=真的嗎?」;我的導航規則不起作用。 JSF不會重定向到成功頁面 – veote
此外,似乎登錄方法不會創建新的Principal。當我想在request.login – veote
之後用我的登錄方法打印它時,UserPrincipal也是一個空對象哦,你還在使用老式的XML導航規則嗎?把' '放在那裏,或者像''viewId?faces-redirect = true「'那樣通過像''viewId''這樣的隱式導航替換所有的導航規則。 –
BalusC