GET请求输入字段中的旧值

时间:2013-08-29 09:02:45

标签: forms jsf

我在 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。),它只能在这种情况下正常工作。

怎么可能?

1 个答案:

答案 0 :(得分:0)

JSF不这样做(作为证据,查看生成的HTML输出)。 webbrowser就是这么做的。此功能称为“自动填充”/“自动填充”。只需将autocomplete="off"添加到各个输入组件即可告诉它不要这样做。

<h:inputText ... autocomplete="off" />
<h:inputSecret ... autocomplete="off" />

或者,如果您使用的是JSF 2.2(或正在使用OmniFaces Html5RenderKit),您也可以在表单范围内进行设置。

<h:form ... autocomplete="off">