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 .