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 .