Рубрики
Без рубрики

Пользовательский фильтр в цепочке фильтров безопасности Spring

Краткое руководство, в котором показаны шаги по добавлению пользовательского фильтра в контексте безопасности Spring.

Автор оригинала: baeldung.

1. Обзор

В этой краткой статье мы сосредоточимся на написании пользовательского фильтра для цепочки фильтров безопасности Spring.

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

Весенняя безопасность – @PreFilter и @PostFilter

Введение в Java Config для безопасности Spring

Автоматическая настройка безопасности весенней загрузки

2. Создание фильтра

Spring Security по умолчанию предоставляет ряд фильтров, и в большинстве случаев их достаточно.

Но, конечно, иногда необходимо реализовать новую функциональность с помощью создания нового фильтра для использования в цепочке.

Мы начнем с реализации фильтра org.springframework.web.GenericFilterBean .

GenericFilterBean – это простой javax.сервлет.Фильтр реализация реализация, которая осознает весну.

Переходим к реализации – нам нужно реализовать только один метод:

public class CustomFilter extends GenericFilterBean {

    @Override
    public void doFilter(
      ServletRequest request, 
      ServletResponse response,
      FilterChain chain) throws IOException, ServletException {
        chain.doFilter(request, response);
    }
}

3. Использование фильтра в конфигурации безопасности

Мы можем выбрать конфигурацию XML или конфигурацию Java, чтобы подключить фильтр к конфигурации безопасности Spring.

3.1. Конфигурация Java

Вы можете зарегистрировать фильтр программно, переопределяя метод configure из WebSecurityConfigurerAdapter . Например, он работает с методом addFilterAfter на HttpSecurity экземпляр:

@Configuration
public class CustomWebSecurityConfigurerAdapter
  extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.addFilterAfter(
          new CustomFilter(), BasicAuthenticationFilter.class);
    }
}

Существует несколько возможных методов:

  • addFilterBefore(фильтр, класс) добавляет фильтр перед позицией указанного фильтра класса
  • addFilterAfter(фильтр, класс) – добавляет фильтр после позиции указанного фильтра класса
  • addFilterAt(фильтр, класс) – добавляет фильтр в расположение указанного фильтра класса
  • addFilter(filter) – добавляет фильтр , который должен быть экземпляром или расширением одного из фильтров, предоставляемых Spring Security

3.2. Конфигурация XML

Вы можете добавить фильтр в цепочку с помощью тега custom-filter и одного из этих имен , чтобы указать положение фильтра. Например, на это может указывать атрибут after :


    


Вот все атрибуты, чтобы точно указать место вашего фильтра в стеке:

  • после – описывает фильтр, сразу после которого пользовательский фильтр будет помещен в цепочку
  • before – определяет фильтр, перед которым наш фильтр должен быть помещен в цепочку
  • position – позволяет заменить стандартный фильтр в явном положении пользовательским фильтром

4. Заключение

В этой краткой статье мы создали пользовательский фильтр и подключили его к цепочке springSecurityFilterChain.

Как всегда, все примеры кода доступны в проекте sample Github .