Servlet 3.0 Abmeldung funktioniert nicht
-
04-10-2019 - |
Frage
Ich habe ein Problem mit den Authentifizierungsfunktionen von Servlets bekam 3.0:
Mit diesem Code in einem Servlet v3:
log.info(""+request.getUserPrincipal());
log.info(""+request.getAuthType());
log.info("===^===");
request.logout() ;
log.info(""+request.getUserPrincipal());
log.info(""+request.getAuthType());
request.authenticate(response) ;
log.info("===v===");
log.info(""+request.getUserPrincipal());
log.info(""+request.getAuthType());
Ich würde immer erwartet, dass die Username / Login-Fenster, um zu sehen, wegen der logout()
Funktion. Stattdessen scheint es einen ‚Cache‘ Mechanismus zu sein, die die Anmeldeinformationen neu zu besiedeln und stornieren meine Abmeldung ...
Admin
BASIC
=== ^ ===
null
null
=== === v
Admin
BASIC
Ist es ein Problem mit meinem firefox, oder etwas, das ich in dem Servlet-Code bin fehle?
Lösung
Ich würde immer erwarten, dass die Username / Login-Fenster, um zu sehen, weil der
logout()
Funktion. Stattdessen scheint es einen ‚Cache‘ Mechanismus zu sein, die die Anmeldeinformationen neu zu besiedeln und stornieren meine Abmeldung ...
Das ist die Art und Weise HTTP BASIC AUTH entwickelt wurde, ermöglicht es beglaubigt Zustand in dem Client gehalten werden. Mit anderen Worten, seine unmöglich mit basic / Digest-Authentifizierung abzumelden, kann der Server nicht einen Client von Caching stoppen und einen BASIC-Auth Authenticator bei zukünftigen Anfragen an den Server erneut zu senden.
Mein Vorschlag ist die Verwendung formularbasierte Authentifizierung und die login
Methode der HTTPServletRequest
.
Referenzen
Andere Tipps
Es ist keines von beiden. Einmal angemeldet, wird der Browser immer Ihre Benutzer-ID und das Passwort an die URL übergeben. Bis Sie starten Sie Ihren Browser. Soweit ich weiß, jeder Browser tut das. Und soweit ich weiß, gibt es derzeit keine Möglichkeit, den Browser zu sagen, über die Anmeldeinformationen zu vergessen.
Doch Sie werden sehen, Ihre Sitzung wird anders sein, wenn Sie abgemeldet. Die übliche Lösung ist eine Variable von einer Art, um die Sitzung hinzuzufügen. Sagen Sie "loggedin". Wenn diese Variable fehlt wissen Sie, der Benutzer sich zuerst anmelden muss und Sie werden umgeleitet sagen login.jsp. Und sobald der Benutzer weitergegeben dieses jsp Sie erneut diese Variable gesetzt.
Die Verwendung von Filtern Sie das systemweite erzwingen kann.