2017-04-20 1 views
1

Ich habe ein einfaches GWT-Login-Formular und ein Java-Servlet für eine einfache Benutzeranmeldung. Ich benutze Form Submit Completion-Ereignis, um die Antwort zu behandeln, ohne an die Ziel-URL der Aktion umzuleiten, und ich möchte die Antwort (Kennwort falsch oder alle OK oder ein anderes benutzerdefiniertes Verhalten) auf der Clientseite behandeln und entsprechende Maßnahmen ergreifen. Wenn die Anmeldung in Ordnung ist, sollte der Browser den Benutzernamen und das Passwort merken.GWT - Login-Formular - Browser fragt immer Passwortereignis wenn Benutzer/Passwort falsch ist

Das Problem ist, dass für jede Antwort, egal ob die Kombination Benutzername + Passwort korrekt ist, der Browser immer darum bittet, sie zu merken. Irgendwelche Ratschläge? Ich möchte keine andere Seite laden, weil ich denselben GWT-Status beibehalten möchte. Ich habe auch versucht, Antwortcodes 400 oder 401 zu senden, aber es funktioniert nicht (getestet in Chrome).

Siehe Code unten:

GWT onModuleLoad()

 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); 

Java Servlets Test:

@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 { 
      resp.setStatus(HttpServletResponse.SC_FORBIDDEN); // not working for 400,401,403 
      printMessageToOutputStream(resp, "NOK", false , true); 
     } 
    } 

BEARBEITEN: ich habe auch versucht, Status 403 (Verboten) und funktioniert nicht (ich habe das Code-Snippet aktualisiert)

Antwort

0

Scheint so, als würden Sie immer einen HTTP-Code von 200 zurückgeben, was dazu führt, dass der Browser denkt, dass alles in Ordnung ist, auch wenn das Passwort falsch ist.

Ich reparierte Ihr Snippet:

@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); 
    } 
} 
+0

Auch nicht arbeiten. (Getestet auf Chrome - und auch mit den Codes 400, 401) –

+0

Dies ist eine Nicht-Lösung, aber warum statt der Verwendung eines Form-Submit nutzen Sie nicht den genialen gwt Client-Server-Mechanismus? Würde dein Leben einfacher machen und das Problem lösen. Anleitung: http://www.gwtproject.org/doc/latest/DevGuideServerCommunication.html –

+0

Ich habe das auch versucht, aber Browser verhält sich sehr seltsam bei der Verwendung von AJAX. Wenn Sie beispielsweise RPC verwenden, wird das Popup Kennwort speichern nicht ausgelöst, es sei denn, Sie senden das Formular zwangsweise ab. Es funktioniert auch nicht auf Chrome, IOs (z. B. iPhone), und wenn Sie den ersten Teil eines Benutzernamens eingeben, um Vorschläge anzuzeigen und auszuwählen (oder Enter auf dem Desktop drücken), fragt der Browser nach dem Passwort für die Hälfte von der Benutzername (auch wenn Sie sich zuvor dafür entschieden haben, diesen vollen Benutzernamen zu behalten). Also konnte ich das nicht zu 100% richtig machen –

Verwandte Themen