Spring Security Logout

1. Übersicht

Dieser Artikel baut auf unserem Tutorial zur Formularanmeldung auf und konzentriert sich auf die Konfiguration der Abmeldung mit Spring Security .

2. Grundkonfiguration

Die Grundkonfiguration der Spring Logout-Funktionalität mithilfe der logout () -Methode ist einfach genug:

@Configuration @EnableWebSecurity public class SecSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(final HttpSecurity http) throws Exception { http //... .logout() //... } //... }

Und mit XML-Konfiguration:

 ...  

Das Element ermöglicht den Standard - Logout - Mechanismus - der Folgendes konfiguriert ist Abmelde url : / Logout , die früher / j_spring_security_logout vor Spring Security 4 .

3. Die JSP und der Logout-Link

Wenn Sie dieses einfache Beispiel fortsetzen, können Sie einen Abmeldelink in der Webanwendung bereitstellen:

Logout 

4. Erweiterte Anpassungen

4.1. logoutSuccessUrl ()

Nachdem der Abmeldevorgang erfolgreich ausgeführt wurde, leitet Spring Security den Benutzer auf eine bestimmte Seite weiter. Standardmäßig ist dies die Stammseite ( "/" ), diese kann jedoch konfiguriert werden:

//... .logout() .logoutSuccessUrl("/afterlogout.html") //...

Dies kann auch mithilfe der XML-Konfiguration erfolgen:

Abhängig von der Anwendung empfiehlt es sich, den Benutzer zurück zur Anmeldeseite zu leiten:

//... .logout() .logoutSuccessUrl("/login.html") //...

4.2. logoutUrl ()

Ähnlich wie bei anderen Standardeinstellungen in Spring Security hat auch die URL, die den Abmeldemechanismus tatsächlich auslöst, eine Standardeinstellung - / logout .

Es ist jedoch eine gute Idee, diesen Standardwert zu ändern, um sicherzustellen, dass keine Informationen darüber veröffentlicht werden, welches Framework zum Sichern der Anwendung verwendet wird:

.logout() .logoutUrl("/perform_logout")

Und durch XML:

4.3. invalidateHttpSession und deleteCookies

Diese beiden erweiterten Attribute steuern die Ungültigmachung der Sitzung sowie eine Liste der Cookies, die gelöscht werden sollen, wenn sich der Benutzer abmeldet. Mit invalidateHttpSession kann die Sitzung so eingerichtet werden, dass sie beim Abmelden nicht ungültig wird ( standardmäßig wahr ).

Die Methode deleteCookies ist ebenfalls einfach:

.logout() .logoutUrl("/perform_logout") .invalidateHttpSession(true) .deleteCookies("JSESSIONID")

Und die XML-Version:

4.4. logoutSuccessHandler ()

In fortgeschritteneren Szenarien, in denen der Namespace nicht flexibel genug ist, kann die LogoutSuccessHandler- Bean aus dem Spring-Kontext durch eine benutzerdefinierte Referenz ersetzt werden:

@Bean public LogoutSuccessHandler logoutSuccessHandler() { return new CustomLogoutSuccessHandler(); } //... .logout() .logoutSuccessHandler(logoutSuccessHandler()); //...

Die entsprechende XML-Konfiguration lautet:

 ... 

Jede benutzerdefinierte Anwendungslogik, die ausgeführt werden muss, wenn sich der Benutzer erfolgreich abmeldet, kann mit dem benutzerdefinierten Abmeldeerfolgshandler implementiert werden. Beispiel: Ein einfacher Überwachungsmechanismus, der die letzte Seite verfolgt, auf der sich der Benutzer befand, als er die Abmeldung auslöste:

public class CustomLogoutSuccessHandler extends SimpleUrlLogoutSuccessHandler implements LogoutSuccessHandler { @Autowired private AuditService auditService; @Override public void onLogoutSuccess( HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { String refererUrl = request.getHeader("Referer"); auditService.track("Logout from: " + refererUrl); super.onLogoutSuccess(request, response, authentication); } }

Beachten Sie außerdem, dass diese benutzerdefinierte Bean dafür verantwortlich ist, das Ziel zu bestimmen, zu dem der Benutzer nach dem Abmelden geleitet wird. Aus diesem Grund funktioniert das Koppeln des logoutSuccessHandler- Attributs mit logoutSuccessUrl nicht, da beide ähnliche Funktionen abdecken.

5. Schlussfolgerung

In diesem Beispiel haben wir zunächst ein einfaches Abmeldebeispiel mit Spring Security eingerichtet und anschließend die erweiterten Optionen erläutert.

Die Implementierung dieses Spring Logout-Tutorials finden Sie im GitHub-Projekt. Dies ist ein Eclipse-basiertes Projekt, daher sollte es einfach zu importieren und auszuführen sein.

Wenn das Projekt lokal ausgeführt wird, kann auf das Beispiel-HTML zugegriffen werden unter:

//localhost:8080/spring-security-mvc-login/login.html