Spring Security Logout

Spring Security Logout

1. Überblick

Dieser Artikel baut auf unserenForm Login tutorial auf und konzentriert sich auf die Konfiguration vonLogout with Spring Security.

Weitere Lektüre:

Spring Security: Authentifizierung mit einem datenbankgestützten UserDetailsService

Eine Kurzanleitung zum Erstellen eines benutzerdefinierten datenbankgestützten UserDetailsService für die Authentifizierung bei Spring Security.

Read more

Einführung in die Spring-Methodensicherheit

Eine Anleitung zur Sicherheit auf Methodenebene mit dem Spring Security Framework.

Read more

Spring Security - Nach der Anmeldung zur vorherigen URL umleiten

Ein kurzes Beispiel für die Umleitung nach der Anmeldung in Spring Security

Read more

2. Grundkonfiguration

Die Grundkonfiguration vonSpring Logout functionality mit der Methodelogout() 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 aktiviert den Standard-Abmeldemechanismus, der für die Verwendung der folgendenlogout url konfiguriert ist:/logout, die früher/j_spring_security_logout vorhttps://docs.spring.io/spring-security/site/migrate/current/3-to-4/html5/migrate-3-to-4-xml.html#m3to4-xmlnamespace-logout. waren

Wenn Sie dieses einfache Beispiel fortsetzen, können Sie in der Webanwendung einlogout link bereitstellen:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

   
   
      ">Logout
   

4. Erweiterte Anpassungen

4.1. logoutSuccessUrl()

Nach erfolgreicher Abmeldung leitet Spring Security den Benutzer zu einer bestimmten Seite weiter. Standardmäßig ist dies die Stammseite (“/”), diese ist jedoch konfigurierbar:

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

Dies kann auch über die XML-Konfiguration erfolgen:

Je nach 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, einen Standardwert -/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 über XML:

4.3. invalidateHttpSession unddeleteCookies

Diese beiden erweiterten Attribute steuern die Sitzungsannullierung sowie eine Liste der Cookies, die beim Abmelden des Benutzers gelöscht werden sollen. MitinvalidateHttpSession kann die Sitzung so eingerichtet werden, dass sie beim Abmelden nicht ungültig wird (standardmäßigtrue).

Die MethodedeleteCookiesist 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 dieLogoutSuccessHandler-Bohne 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:



...

Allecustom application logic that needs to run when the user successfully logs out können mit dem benutzerdefinierten Abmeldeerfolgshandler implementiert werden. Zum Beispiel - ein einfacher Prüfmechanismus, 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);
    }
}

Denken Sie auch daran, dass diese benutzerdefinierte Bean die Verantwortung hat, das Ziel zu bestimmen, an das der Benutzer nach dem Abmelden weitergeleitet wird. Aus diesem Grund funktioniert das Koppeln des AttributslogoutSuccessHandler mitlogoutSuccessUrl nicht, da beide ähnliche Funktionen abdecken.

5. Fazit

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

Die Implementierung dieses Spring Logout-Lernprogramms finden Sie inthe GitHub project - 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: