webentwicklung-frage-antwort-db.com.de

Implementieren Sie die Funktion zum Abmelden in Spring Boot

Um eine grundlegende Sicherheitsfunktion zum Laufen zu bringen, habe ich meinem pom.xml das folgende Starterpaket hinzugefügt

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>

Und folgende zwei Eigenschaften zu application.properties hinzugefügt:

security.user.name = guest
security.user.password = tiger

Wenn ich jetzt auf meine Homepage gehe, erhalte ich die Anmeldebox und die Anmeldung funktioniert wie erwartet.

Jetzt möchte ich die Funktion "Abmelden" implementieren. Grundsätzlich wird der Benutzer abgemeldet, wenn er auf einen Link klickt. Ich habe festgestellt, dass beim Anmelden kein Cookie in meinem Browser hinzugefügt wird. Ich gehe davon aus, dass Spring Security ein HttpSession-Objekt für den Benutzer erstellt. Ist das wahr? Muss ich diese Sitzung ungültig machen und den Benutzer auf eine andere Seite umleiten? Wie lässt sich die Funktion "Abmelden" in einer Sprint Boot-basierten Anwendung am besten implementieren?

26
DilTeam

Besser spät als nie. Spring Boot bietet standardmäßig viele Sicherheitskomponenten, einschließlich des CSRF-Schutzes. Eine der Aktionen, die ausgeführt werden, ist das Erzwingen des Abmeldens (POST=), siehe hier: http://docs.spring.io/spring-security/site/docs/3.2.4.RELEASE)/reference/htmlsingle/# csrf-logout

Wie dies nahelegt, können Sie dies überschreiben, indem Sie Folgendes verwenden:

http.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")                                      
.anyRequest().fullyAuthenticated()
.and()
.formLogin().loginPage("/login").failureUrl("/login?error").permitAll()
.and()
.logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout")).logoutSuccessUrl("/login");

Die letzte Zeile ist die wichtige.

79
mmeany