Вопрос с собеседования · Spring

Как Spring Security встраивается в обработку запроса?

JuniorSpring Security
Ещё спрашивают так:
  • Где Spring Security проверяет доступ?
Коротко

Через цепочку сервлетных фильтров до DispatcherServlet: аутентификация и проверка доступа происходят до контроллера. Неаутентифицированный — 401, без прав — 403.

  • Цепочка настраивается бином SecurityFilterChain
  • Результат аутентификации — в SecurityContext
  • Права на методы — @PreAuthorize

А ещё Контроллер получает пользователя через @AuthenticationPrincipal

Подробно

Каждый фильтр отвечает за свою задачу — разбор данных аутентификации, проверка CSRF, установка контекста безопасности, проверка прав на запрос — и решает, пропускать ли запрос дальше по цепочке. Из этого следуют два практических вывода. Порядок фильтров и порядок правил авторизации значим: применяется первое подошедшее правило. И защита работает независимо от контроллеров, поэтому не может быть обойдена забытой аннотацией; аннотации на методах — дополнительный уровень поверх, а не единственный.

Что хотят услышать

  • Фильтры до контроллера.
  • Коды ответа и SecurityContext.

Частые ошибки

  • Полагаться только на аннотации на методах.
  • Игнорировать порядок правил при настройке доступа.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗Аннотацией на каждом методе контроллера, без которой защиты нет вообще
  • ✗Проверкой прав на уровне базы данных через представления и триггеры
  • ✗Отдельным сервером-шлюзом, который запускается перед приложением
  • ✓Цепочкой сервлетных фильтров, которые срабатывают до контроллера

Что спросят дальше

  • Почему порядок правил авторизации важен?
  • Что хранится в контексте безопасности?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования