Карта / Spring Security / Filter chain

Filter chain

Filter chain (цепочка фильтров) — последовательность проверок, через которые проходит каждый HTTP-запрос, прежде чем дойдёт до контроллера. Это происходит раньше, чем DispatcherServlet (см. тему «DispatcherServlet») вообще получит запрос.

Запрос Auth Filter AuthZ Filter Контроллер

Каждый фильтр решает свою узкую задачу: один проверяет, кто пользователь (аутентификация), другой — может ли он делать то, что запрашивает (авторизация). Если любой фильтр “отклоняет” запрос — он не доходит до контроллера вообще.

Копнуть глубже

Аутентификация vs авторизация — две разные вещи, которые часто путают:

  • Аутентификация — «кто ты?» (проверка логина/пароля, токена);
  • Авторизация — «что тебе разрешено делать?» (есть ли у тебя нужная роль/право для этого конкретного действия).

Базовая настройка цепочки в современном Spring Security:

@Bean
SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
    http
        .authorizeHttpRequests(auth -> auth
            .requestMatchers("/api/public/**").permitAll()      // не требует авторизации
            .requestMatchers("/api/admin/**").hasRole("ADMIN")  // только для роли ADMIN
            .anyRequest().authenticated())                       // остальное — нужна авторизация
        .build();
    return http.build();
}

Фильтры выполняются строго по порядку — если один из них уже отклонил запрос (например, нет валидного токена), остальные даже не вызываются, запрос сразу возвращается клиенту с ошибкой 401/403.

🎤 Закрыл тему, если можешь объяснить:
• что такое filter chain и где он стоит относительно DispatcherServlet;
• разницу аутентификации и авторизации (если дошёл до 2-го слоя).