Spring Security Logout

Spring Security Logout

1. обзор

Эта статья построена на основе нашегоForm Login tutorial и сосредоточена на том, как настроитьLogout with Spring Security.

Дальнейшее чтение:

Spring Security: проверка подлинности с помощью UserDetailsService с поддержкой базы данных

Краткое руководство по созданию пользовательского UserDetailsService с поддержкой базы данных для аутентификации в Spring Security.

Read more

Введение в безопасность методов Spring

Руководство по безопасности на уровне методов с использованием среды безопасности Spring.

Read more

Spring Security - Перенаправление на предыдущий URL после входа в систему

Краткий пример перенаправления после входа в Spring Security

Read more

2. Базовая конфигурация

Базовая конфигурацияSpring Logout functionality с использованием методаlogout() достаточно проста:

@Configuration
@EnableWebSecurity
public class SecSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(final HttpSecurity http) throws Exception {
        http
          //...
          .logout()
          //...
   }
   //...
}

И используя конфигурацию XML:



    ...
    

Элемент включает механизм выхода из системы по умолчанию, который настроен на использование следующегоlogout url:/logout, который раньше был/j_spring_security_logout доhttps://docs.spring.io/spring-security/site/migrate/current/3-to-4/html5/migrate-3-to-4-xml.html#m3to4-xmlnamespace-logout.

Продолжая этот простой пример, можно указатьlogout link в веб-приложении:

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

   
   
      ">Logout
   

4. Расширенные настройки

4.1. logoutSuccessUrl()с

После успешного завершения процесса выхода Spring Security перенаправит пользователя на указанную страницу. По умолчанию это корневая страница (“/”), но ее можно настроить:

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

Это также можно сделать с помощью конфигурации XML:

В зависимости от приложения хорошей практикой является перенаправление пользователя обратно на страницу входа:

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

4.2. logoutUrl()с

Подобно другим значениям по умолчанию в Spring Security, URL-адрес, который фактически запускает механизм выхода из системы, также имеет значение по умолчанию -/logout.

Однако рекомендуется изменить это значение по умолчанию, чтобы не публиковать информацию о том, какая инфраструктура используется для защиты приложения:

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

И через XML:

4.3. invalidateHttpSession иdeleteCookies

Эти два расширенных атрибута контролируют недействительность сеанса, а также список файлов cookie, которые должны быть удалены при выходе пользователя из системы. Таким образом,invalidateHttpSession позволяет настроить сеанс так, чтобы он не становился недействительным при выходе из системы (по умолчанию этоtrue).

МетодdeleteCookies также прост:

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

И версия XML:

4.4. logoutSuccessHandler()с

Для более сложных сценариев, где пространство имен недостаточно гибкое, bean-компонентLogoutSuccessHandler из контекста Spring можно заменить специальной ссылкой:

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

//...
.logout()
.logoutSuccessHandler(logoutSuccessHandler());
//...

Эквивалентная конфигурация XML:



...

Любойcustom application logic that needs to run when the user successfully logs out может быть реализован с помощью специального обработчика успешного выхода из системы. Например - простой механизм аудита, отслеживающий последнюю страницу, на которой был пользователь, когда он инициировал выход из системы:

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 находится вthe GitHub project - это проект на основе Eclipse, поэтому его должно быть легко импортировать и запускать как есть.

Когда проект выполняется локально, образец HTML-кода доступен по адресу:

Related