Внедрите функциональность "logout" в Spring Boot

Чтобы получить базовую функцию безопасности, я добавил следующий стартовый пакет в свой pom.xml

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

И добавил следующие свойства в application.properties:

security.user.name = гость
security.user.password = тигр

Теперь, когда я попал на свою домашнюю страницу, я получаю окно входа и логин, как и ожидалось.

Теперь я хочу реализовать функцию выхода. В принципе, когда пользователь нажимает на ссылку, она выходит из системы. Я заметил, что логин не добавляет cookie в мой браузер. Я предполагаю, что Spring Security создает для пользователя объект HttpSession. Это правда? Нужно ли мне "аннулировать этот сеанс и перенаправить пользователя на какую-либо другую страницу? Каков наилучший способ реализовать функцию выхода из системы в приложении на основе Sprint Boot?

Ответы

Ответ 1

Позднее лучше, чем никогда. Spring Загрузка по умолчанию содержит множество компонентов безопасности, включая защиту CSRF. Одна из вещей, которые делает это, - принудительный выход POST, см. Здесь: http://docs.spring.io/spring-security/site/docs/3.2.4.RELEASE/reference/htmlsingle/#csrf-logout

Как это можно предположить, вы можете переопределить это, используя что-то по строкам:

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

Последняя строка важна.