我正在尝试使用 jsf 2.0 表单对用户进行身份验证。我还想创建 UserPrincipals。我认为使用 HttpServletRequest.login 方法可以创建一个新的 UserPrincipal。 http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html
我所做的是:
配方:
<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 的方式有什么问题?
最好的