我有一个简单的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)并且它无效(我更新了代码片段)
答案 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);
}
}