GWT - 登录表单 - 如果用户/密码不正确,浏览器总是要求记住密码事件

时间:2017-04-20 05:49:40

标签: javascript java gwt

我有一个简单的GWT登录表单和一个用于简单用户登录的java servlet。我正在使用表单提交完成事件来处理响应,而不重定向到操作目标URL,我想在客户端处理答案(密码不正确或所有正常或任何其他自定义行为),然后采取适当的操作。如果登录正常,则浏览器应该要求记住用户名和密码。

问题是,对于每个响应,无论用户名+密码组合是否正确,浏览器总是要求记住它们。 有什么建议?我不想加载另一个页面,因为我想保持相同的GWT状态。我也尝试发送响应代码400或401,但它不起作用(在Chrome中测试)。

见下面的代码:

GWT onModuleLoad():

conda install pyqt

Java Servlet测试:

        final FormPanel formPanel = new FormPanel();
        formPanel.setEncoding(FormPanel.ENCODING_URLENCODED);
        formPanel.setMethod(FormPanel.METHOD_POST);

        VerticalPanel verticalPanel = new VerticalPanel();
        verticalPanel.add(new Label("Username"));
        TextBox userid = new TextBox();
        userid.setName("username");
        verticalPanel.add(userid);

        verticalPanel.add(new Label("Password"));
        PasswordTextBox passwd = new PasswordTextBox();
        passwd.setName("password");
        verticalPanel.add(passwd);

        verticalPanel.add(new Button("Submit", new ClickHandler() {

            @Override
                public void onClick(ClickEvent event) {
            formPanel.submit();
            }
        }));

        formPanel.add(verticalPanel);

        formPanel.setAction("/login"); 

        formPanel.addSubmitHandler(new FormPanel.SubmitHandler() {
            public void onSubmit(SubmitEvent event) {
            }
        });
        formPanel.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler() {
            public void onSubmitComplete(SubmitCompleteEvent event) {
                GWT.log(event.getResults());
            }
        });

        RootPanel.get().add(formPanel);

修改 我也尝试了状态403(Forbidden)并且它无效(我更新了代码片段)

1 个答案:

答案 0 :(得分:0)

好像你总是返回200个http代码,导致浏览器认为即使密码错误也一切正常。

我修复了你的代码片段:

   @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    String username = req.getParameter("username");
    String password = req.getParameter("password");
    resp.setContentType("text/plain");

    System.out.println("Login request for " + username + " / " + password);
    if (username.equals("test1234")) {
        // send test response to output
        printMessageToOutputStream(resp, "OK", true, true);
    }
    else {
        // Hey browser, authentication failed
        resp.setStatus(HttpServletResponse.SC_FORBIDDEN);
        printMessageToOutputStream(resp, "NOK", false , true);
    }
}