2017-08-22 1 views
1

Ich verwende spring-boot-starter-web, um eine war App zu erstellen, die auf einem eigenständigen tomcat8 bereitgestellt wird.Wie verhindert man Sitzungen in einem Tomcat für Servlets mit Basic-Auth?

Ich habe @EnableWebSecurity zu erzwingen basic-authentication auf jeder Servlet-Anfrage, und auch die Gui zu sichern.

Aber der Hauptzweck ist die Bereitstellung eines Webservice-XML, auf den hauptsächlich programmgesteuert zugegriffen wird. Somit senden die Clients ihre GET Anfragen immer mit basic-auth.

Problem: tomcat erstellt für jede Anfrage eine neue Sitzung! Und da die Clients programmgesteuert mit den XML-Servlets verbunden sind, werden die Sitzungen nie ausgeloggt. Und auch nicht wiederverwendet, da die nächste Client-Anfrage erneut die Basic-Auth überträgt.

Diese Sitzungen verbleiben also bis zum Timeout im Tomcat (z. B. Standard 30 Minuten). Und konsumiere die Zeit.

Frage: Wie kann ich Tomcat oder die Feder-Servlets sagen, dass Verbindungen, die die Basic-Auth http-Header müssen keine Sitzung erstellen? Einfach den Benutzer authentifizieren, die Antwort senden und Session-Informationen vergessen?

+0

https://stackoverflow.com/questions/2255814/can-i-turn-off-the-httpsession-in-web-xml – StanislavL

+0

Wenn Sie die Verwendung von 'SessionCreationPolicy.STATELESS' bedeuten: Wie kann ich das nur auf bestimmte Pfade anwenden und zB den '/ gui'-Pfad als Stateful behandeln? – membersound

Antwort

0

Sie können die Sitzungserstellung Politik SessionCreationPolicy.STATELESS

Spring Security wird nie eine Http schaffen, und es wird sie nie die Security

Set es in Ihrem WebSecurityConfiguration wie zu erhalten, verwenden:

http.antMatcher("/api/**") 
       .sessionManagement() 
       .sessionCreationPolicy(SessionCreationPolicy.STATELESS); 
0

SessionCreationPolicy.NEVER ist die richtige Antwort hier. Weil es standardmäßig keine Sitzung erstellen wird. Aber wenn eine Sitzung angefordert wird (zB wegen einer Formularanmeldung in meinem/gui-Pfad), wird sie verwendet.

Auf diese Weise erstellt keine der programmgesteuerten Anforderungen eine Sitzung. Aber wenn sie innerhalb eines Webbrowsers getestet wird (und somit durch eine Formularanmeldung gesichert wird, um basic-auth bereitzustellen), wird die Sitzung erstellt. Welches ist das gewünschte Verhalten, da niemand die Basisauthentifizierungsdaten jedes Mal eingeben möchte, wenn eine Anforderung von einem Browser aus gesendet wird.

http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER);

+1

Schön, dass Sie eine Sitzungserstellungsrichtlinie finden, die für alle Ihre Fälle funktioniert, aber Sie können auch verschiedene Richtlinien auf verschiedene Endpunkte mit etwas wie "http.antMatcher ("/api/** ") anwenden. SessionManagement(). SessionCreationPolicy (.....) '. –

Verwandte Themen