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

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

Вы можете зарегистрировать фильтр, программно переопределив метод настройки из 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 (фильтр) - добавляет фильтр, который должен быть экземпляром или расширять один из фильтров, предоставляемых Spring Security.

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

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

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

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

4. Вывод

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

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