1. Обзор
Эта статья основана на нашем учебнике по входу в форму и посвящена тому, как настроить выход из системы с помощью Spring Security .
2. Базовая конфигурация
Базовая конфигурация функциональности Spring Logout с использованием метода logout()
достаточно проста:
@Configuration
@EnableWebSecurity
public class SecSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(final HttpSecurity http) throws Exception {
http
//...
.logout()
//...
}
//...
}
И используя конфигурацию XML:
<http>
...
<logout/>
</http>
Этот элемент включает механизм выхода из системы по умолчанию, который настроен на использование следующего URL -адреса выхода : /logout
, который раньше был /j_spring_security_logout
до Spring Security 4 .
3. JSP и ссылка для выхода
Продолжая этот простой пример, способ предоставить ссылку для выхода в веб-приложении:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head></head>
<body>
<a href="<c:url value="/logout" />">Logout</a>
</body>
</html>
4. Расширенные настройки
4.1. ВыходУспехУрл()
После успешного завершения процесса выхода Spring Security перенаправит пользователя на указанную страницу. По умолчанию это корневая страница ( «/»
), но это можно настроить:
//...
.logout()
.logoutSuccessUrl("/afterlogout.html")
//...
Это также можно сделать с помощью конфигурации XML:
<logout logout-success-url="/afterlogout.html" />
В зависимости от приложения рекомендуется перенаправить пользователя обратно на страницу входа:
//...
.logout()
.logoutSuccessUrl("/login.html")
//...
4.2. URL-адрес выхода()
Подобно другим значениям по умолчанию в Spring Security, URL-адрес, который фактически запускает механизм выхода из системы, также имеет значение по умолчанию — /logout
.
Однако рекомендуется изменить это значение по умолчанию, чтобы убедиться, что информация о том, какая структура используется для защиты приложения, не публикуется:
.logout()
.logoutUrl("/perform_logout")
И через XML:
<logout
logout-success-url="/anonymous.html"
logout-url="/perform_logout" />
4.3. невалидироватьHttpSession
и удалитьCookies
Эти два расширенных атрибута управляют аннулированием сеанса, а также списком файлов cookie, которые должны быть удалены при выходе пользователя из системы. Таким образом, invalidateHttpSession
позволяет настроить сеанс таким образом, чтобы он не становился недействительным при выходе из системы ( по умолчанию это значение true ).
Метод deleteCookies
также прост:
.logout()
.logoutUrl("/perform_logout")
.invalidateHttpSession(true)
.deleteCookies("JSESSIONID")
И версия XML:
<logout
logout-success-url="/anonymous.html"
logout-url="/perform_logout"
delete-cookies="JSESSIONID" />
4.4. logoutSuccessHandler()
Для более сложных сценариев, где пространство имен недостаточно гибко, bean- компонент LogoutSuccessHandler
из контекста Spring можно заменить пользовательской ссылкой:
@Bean
public LogoutSuccessHandler logoutSuccessHandler() {
return new CustomLogoutSuccessHandler();
}
//...
.logout()
.logoutSuccessHandler(logoutSuccessHandler());
//...
Эквивалентная конфигурация XML:
<logout
logout-url="/perform_logout"
delete-cookies="JSESSIONID"
success-handler-ref="customLogoutSuccessHandler" />
...
<beans:bean name="customUrlLogoutSuccessHandler" />
Любая пользовательская логика приложения, которая должна выполняться при успешном выходе пользователя из системы, может быть реализована с помощью пользовательского обработчика успешного выхода из системы. Например, простой механизм аудита, отслеживающий последнюю страницу, на которой находился пользователь, когда он инициировал выход из системы:
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);
}
}
Кроме того, имейте в виду, что этот пользовательский компонент отвечает за определение места назначения, к которому направляется пользователь после выхода из системы. Из-за этого объединение атрибута logoutSuccessHandler
с logoutSuccessUrl
не будет работать, так как оба имеют схожие функции.
5. Вывод
В этом примере мы начали с настройки простого примера выхода из системы с помощью Spring Security, а затем обсудили более сложные доступные параметры.
Реализация этого учебника Spring Logout Tutorial может быть найдена в проекте GitHub — это проект на основе Eclipse, поэтому его должно быть легко импортировать и запускать как есть.
Когда проект выполняется локально, доступ к образцу HTML можно получить по адресу: