Что вы знаете о сервлетных фильтрах
Сервлетный фильтр — это Java-класс, реализующий интерфейс javax.servlet.Filter, который перехватывает HTTP-запросы и ответы для выполнения кросс-cutting логики: аутентификации, логирования, компрессии, CORS, модификации заголовков. Фильтры образуют цепочку (FilterChain), через которую последовательно проходит каждый запрос.
Аналогия из жизни: фильтры — это контрольно-пропускные пункты на пути посетителя в здание. Первый проверяет паспорт (аутентификация), второй выдаёт пропуск (авторизация), третий записывает время входа (логирование). Посетитель проходит все КПП по порядку.
Методы интерфейса Filter
| Метод | Назначение |
|---|---|
init(FilterConfig config) |
Инициализация фильтра (вызывается один раз) |
doFilter(request, response, chain) |
Основная логика фильтрации. Вызов chain.doFilter() передаёт управление следующему фильтру или сервлету |
destroy() |
Освобождение ресурсов при выгрузке фильтра |
Регистрация фильтра
Через web.xml
<filter>
<filter-name>LoggingFilter</filter-name>
<filter-class>xyz.company.LoggingFilter</filter-class>
<init-param>
<param-name>active</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>LoggingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Через аннотацию: @WebFilter("/*").
Порядок выполнения фильтров определяется порядком их объявления в web.xml. Фильтры, определённые через <url-pattern>, выполняются раньше фильтров, определённых через <servlet-name>.
В Spring Security вся модель безопасности построена на цепочке фильтров (SecurityFilterChain). Понимание FilterChain критически важно для отладки проблем аутентификации и авторизации в Spring-приложениях.
На собеседовании: обязательно упомяните, что Spring Security — это цепочка сервлетных фильтров. Это показывает, что вы понимаете связь между Servlet API и Spring.