Gymterview
middle

Что вы знаете о сервлетных фильтрах

Сервлетный фильтр — это 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.