我在 loginform.xhtml 文件中有这个JSF表单:
<h:form>
<h:panelGrid columns="3" styleClass="components" cellpadding="5px">
<h:outputText value="#{msg['login.username']}"/>
<h:inputText id="username" value="#{userManager.loginUser.username}" required="true"/>
<h:message styleClass="error" for="username"/>
<h:outputText value="#{msg['login.password']}"/>
<h:inputSecret id="password" value="#{userManager.loginUser.password}"
required="true"/>
<h:message styleClass="error" for="password"/>
<h:commandButton value="#{msg['login.confirm']}"
action="#{userManager.doLogin}"/>
</h:panelGrid>
</h:form>
使用此ManagedBean:
public class UserManager implements Serializable {
/**
* Creates a new instance of UserManager
*/
public UserManager() {
}
private UserRecord loginUser = new UserRecord();
private UserRecord sessionUser;
@EJB
private UserRecordFacadeLocal userRecordFacade;
public UserRecord getLoginUser() {
return loginUser;
}
public void setLoginUser(UserRecord loginUser) {
this.loginUser = loginUser;
}
public UserRecord getSessionUser() {
return sessionUser;
}
public void setSessionUser(UserRecord sessionUser) {
this.sessionUser = sessionUser;
}
public String doLogout() {
setSessionUser(null);
return "logout";
}
public String doLogin() {
if (userRecordFacade.authorizedAcces(loginUser.getUsername(), loginUser.getPassword())) {
setSessionUser(loginUser);
return "success";
}
return "failure";
}
}
这是我的问题:如果我输入loginform.xhtml的GET请求(在我的情况下:http://localhost:8080/Impetus-web/loginform.xhtml
),表单将由旧值填充!更正确的值 - 这对系统的安全性非常不利:-)。如果我通过h:link标签导航到此页面,也会发生同样的情况。如果我通过POST请求跳转到页面(通过commandButton f。e。),它只能在这种情况下正常工作。
怎么可能?
答案 0 :(得分:0)
JSF不这样做(作为证据,查看生成的HTML输出)。 webbrowser就是这么做的。此功能称为“自动填充”/“自动填充”。只需将autocomplete="off"
添加到各个输入组件即可告诉它不要这样做。
<h:inputText ... autocomplete="off" />
<h:inputSecret ... autocomplete="off" />
或者,如果您使用的是JSF 2.2(或正在使用OmniFaces Html5RenderKit
),您也可以在表单范围内进行设置。
<h:form ... autocomplete="off">