Какие ограничения с безопасностью были при переходе на Spring Boot 3
Что проверяют
Проходили ли вы миграцию руками или знаете её по статьям. Интервьюер ждёт конкретных поломок: что перестало компилироваться и что молча поменяло поведение. Следом обычно спрашивают, как вы проверяли, что после обновления не открылся лишний доступ.
Как отвечать
Spring Boot 3 тянет за собой Spring Framework 6 и Spring Security 6, а минимальной версией стала Java 17. Дальше по пунктам:
- Jakarta EE: пакеты
javax.servletиjavax.persistenceсменились наjakarta.*. Фильтры и библиотеки, собранные подjavax, приходится обновлять; WebSecurityConfigurerAdapterудалён: конфигурация теперь бинSecurityFilterChain, аantMatchersиmvcMatchersзаменены наrequestMatchersвнутриauthorizeHttpRequests;- методная безопасность: вместо
@EnableGlobalMethodSecurityиспользуется@EnableMethodSecurity, гдеprePostEnabledвключён по умолчанию; - контекст безопасности: он больше не сохраняется в сессию автоматически. Свой фильтр аутентификации должен явно вызвать
SecurityContextRepository, иначе пользователь теряет вход на следующем запросе; - все типы dispatch: правила доступа применяются и к
FORWARD, и кERROR, поэтому ответ 400 или 500 превращается в 401, пока не разрешить/error; - CSRF: токен загружается отложенно и по умолчанию маскируется от атаки BREACH. SPA, читавшие токен из cookie, ломаются, пока не настроить обработчик токена;
- завершающий слэш:
/api/users/больше не совпадает с/api/users.
Старый Spring Security OAuth под Boot 3 не работает: сервер авторизации переводят на Spring Authorization Server, ресурс-сервер на oauth2ResourceServer. Сильный ход: сначала Boot 2.7 и Spring Security 5.8 с включёнными новыми умолчаниями, потом мажорная версия.
Где спотыкаются
Говорят, что в Boot 3 убрали Basic-аутентификацию. Её никто не убирал, httpBasic() на месте, поменялся только стиль конфигурации.
Переписывают конфиг и не прогоняют тесты доступа. Сдвиги в сопоставлении путей вручную не заметить, и без тестов через MockMvc и @WithMockUser на каждую роль их находят на проде.
Отключают CSRF целиком, чтобы починить фронтенд, вместо того чтобы настроить обработчик токена.