Обновление стека: Spring Boot 2.5 → 3.5 (+ сопутствующие зависимости)
Цель
Перевести backend на актуальный Spring Boot 3.x / Spring Framework 6 и Hibernate 6, чтобы уйти с EOL-версий, закрыть накопившиеся уязвимости в транзитивных зависимостях и разблокировать дальнейшие обновления.
Что обновлено
- Spring Boot 2.5.9 → 3.5.3, spring-dependency-management 1.0.11 → 1.1.7
- Hibernate ORM 6.6 (приходит с Boot 3.5), Jakarta EE — миграция пакетов javax.* → jakarta.*
- Flyway 6.5.5 → 11.8.2 (+ добавлен flyway-database-postgresql)
- springdoc-openapi 1.6.12 → 2.8.6 (стартер springdoc-openapi-starter-webmvc-ui)
- JUnit 5.3.1 → 5.12.2, Testcontainers 1.15.1 → 1.21.3, spring-cloud-contract-wiremock 3.1.1 → 4.3.0, okhttp3 4.10 → 4.12, kotlinx-coroutines 1.6.0 → 1.10.1, org.json 20210307 → 20250107
- Целевая JVM — Java 17
Ключевые изменения в коде
- Spring Security 6: конфиг переведён с WebSecurityConfigurerAdapter / authorizeRequests() на бинову SecurityFilterChain / authorizeHttpRequests(); @EnableGlobalMethodSecurity → @EnableMethodSecurity.
- Gradle/Kotlin DSL: kotlinOptions.jvmTarget → compilerOptions.jvmTarget, замена $buildDir на layout.buildDirectory.
- Удалён spring-boot-starter-batch (не использовался).
Правки, найденные при поднятии на новом стеке
- HQL под Hibernate 6 (StudyHistoryRepository) — строгая валидация запросов на старте роняла контекст. Исправлено:
- сырое имя колонки user_id → property-путь s.userAccount.id;
- PostgreSQL-функции date_trunc(...), now() → портируемый HQL cast(s.startTime as date) / current_date;
- EXTRACT(MONTH/YEAR FROM ...) → month() / year().
- Регрессия авторизации (WebSecurityBasicConfiguration) — в Spring Security 6 authorizeHttpRequests отклоняет непокрытые правилом запросы (401), тогда как раньше они разрешались. Возвращено прежнее поведение через
anyRequest().permitAll(); защита остаётся на @RolesAllowed уровне методов. Иначе публичные GET-эндпоинты (например, /api/contributors, используемый на сайте без авторизации) отдавали бы 401.
Обновление стека: Spring Boot 2.5 → 3.5 (+ сопутствующие зависимости)
Цель
Перевести backend на актуальный Spring Boot 3.x / Spring Framework 6 и Hibernate 6, чтобы уйти с EOL-версий, закрыть накопившиеся уязвимости в транзитивных зависимостях и разблокировать дальнейшие обновления.
Что обновлено
Ключевые изменения в коде
Правки, найденные при поднятии на новом стеке
anyRequest().permitAll(); защита остаётся на @RolesAllowed уровне методов. Иначе публичные GET-эндпоинты (например, /api/contributors, используемый на сайте без авторизации) отдавали бы 401.