Перейти к основному содержимому

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

· 2 мин. чтения

1. Обзор

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

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

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

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

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

GenericFilterBean — это простая реализация реализации javax.servlet.Filter , поддерживающая Spring. ``

Что касается реализации — нам нужно реализовать только один метод:

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 Security.

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(filter, class) – добавляет фильтр перед позицией указанного класса фильтра
  • addFilterAfter(filter, class) – добавляет фильтр после позиции указанного класса фильтра
  • addFilterAt(filter, class) – добавляет фильтр на место указанного класса фильтра
  • addFilter(filter) — добавляет фильтр , который должен быть экземпляром или расширением одного из фильтров, предоставляемых Spring Security.

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

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

<http>
<custom-filter after="BASIC_AUTH_FILTER" ref="myFilter" />
</http>

<beans:bean id="myFilter" class="com.foreach.security.filter.CustomFilter"/>

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

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

4. Вывод

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

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