В конфигурации указано сначала anyRequest().authenticated(), а затем requestMatchers("/public/**").permitAll(). Что получится?
- Почему permitAll не срабатывает в Spring Security?
Первое совпавшее правило выигрывает: anyRequest().authenticated() перехватит всё, включая /public/**. В Spring Security 6 такая конфигурация падает при старте — anyRequest обязан стоять последним.
- Сначала конкретные пути, потом общие
- permitAll для статики и публичных API — до anyRequest
- Разные правила для частей приложения — разные SecurityFilterChain
А ещё Отладка — TRACE-логи Spring Security
Подробно
Правила авторизации образуют упорядоченный список, и Spring Security применяет первое, чей матчер подошёл к запросу — специфичность роли не играет. Поэтому порядок пишут от частного к общему, а anyRequest ставят завершающим. В свежих версиях Spring Security подобная ошибка обычно ловится при старте с сообщением о недостижимом правиле, но полагаться на это не стоит. Хорошая практика — завершать цепочку именно anyRequest().authenticated() или denyAll(), реализуя принцип запрета по умолчанию: новый эндпоинт тогда закрыт, пока для него явно не описано правило.
Что хотят услышать
- Правило первого совпадения.
- Правильный порядок.
Частые ошибки
- Ожидать, что более конкретный матчер победит независимо от позиции.
- Забыть завершающее правило и оставить часть путей без явной политики.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Более специфичное правило автоматически получит приоритет независимо от порядка объявления
- ✗Обе строки применятся, и доступ будет открыт
- ✗Конфигурация не скомпилируется
- ✓Срабатывает первое подходящее правило, поэтому и /public потребует аутентификации
Что спросят дальше
- Почему завершать цепочку denyAll безопаснее?
- Чем правила авторизации отличаются от method security?
Разбор темы
- Spring Security: фильтр-цепочка и авторизация
SecurityFilterChain, аутентификация (UserDetailsService/PasswordEncoder), SecurityContext, авторизация запросов и CSRF/CORS/сессии.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.