From 50390a9c9b6bdbed7b5bb6313e511baf3e9397f4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 24 Nov 2025 08:13:57 +0000 Subject: [PATCH 1/6] fix(deps): update dependency org.springframework.boot:spring-boot-starter-parent to v4 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5923d53f..259bb292 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ org.springframework.boot spring-boot-starter-parent - 3.5.8 + 4.0.0 From b18295951f0fe12382895c56b871fa4ba256769e Mon Sep 17 00:00:00 2001 From: Alice Lambois Date: Mon, 24 Nov 2025 14:52:19 +0100 Subject: [PATCH 2/6] fix: update for springboot 4 --- pom.xml | 12 ++++++++++- .../configuration/LogRequestFilter.java | 3 ++- .../rest/responses/ResponseController.java | 2 +- .../genesis/domain/model/surveyunit/Mode.java | 2 +- .../LunaticModelDefinitions.java | 2 +- .../functional_tests/RawDataDefinitions.java | 4 +++- .../config/CucumberSpringConfiguration.java | 19 ++++++------------ .../controller/rest/ControllerAccessTest.java | 20 +++++-------------- 8 files changed, 30 insertions(+), 34 deletions(-) diff --git a/pom.xml b/pom.xml index 1c72d446..1bc60975 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,6 @@ 2.8.14 1.6.3 7.32.0 - 5.13.4 0.8.14 @@ -74,6 +73,17 @@ spring-security-test test + + org.springframework.boot + spring-boot-resttestclient + test + + + org.springframework.boot + spring-boot-starter-webmvc-test + test + + diff --git a/src/main/java/fr/insee/genesis/configuration/LogRequestFilter.java b/src/main/java/fr/insee/genesis/configuration/LogRequestFilter.java index 3a18fc01..e93edcdb 100644 --- a/src/main/java/fr/insee/genesis/configuration/LogRequestFilter.java +++ b/src/main/java/fr/insee/genesis/configuration/LogRequestFilter.java @@ -32,9 +32,10 @@ public class LogRequestFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { + int cacheLimit = -1;//<0 means no limit //Cache request to avoid calling twice the same inputStream - ContentCachingRequestWrapper req = new ContentCachingRequestWrapper(request); + ContentCachingRequestWrapper req = new ContentCachingRequestWrapper(request, cacheLimit); ContentCachingResponseWrapper resp = new ContentCachingResponseWrapper(response); log.info(REQUEST_MESSAGE_FORMAT, diff --git a/src/main/java/fr/insee/genesis/controller/rest/responses/ResponseController.java b/src/main/java/fr/insee/genesis/controller/rest/responses/ResponseController.java index c228535b..cf5f7965 100644 --- a/src/main/java/fr/insee/genesis/controller/rest/responses/ResponseController.java +++ b/src/main/java/fr/insee/genesis/controller/rest/responses/ResponseController.java @@ -35,10 +35,10 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; +import org.jspecify.annotations.Nullable; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; -import org.springframework.lang.Nullable; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.DeleteMapping; diff --git a/src/main/java/fr/insee/genesis/domain/model/surveyunit/Mode.java b/src/main/java/fr/insee/genesis/domain/model/surveyunit/Mode.java index cbf45b86..4d18100f 100644 --- a/src/main/java/fr/insee/genesis/domain/model/surveyunit/Mode.java +++ b/src/main/java/fr/insee/genesis/domain/model/surveyunit/Mode.java @@ -2,7 +2,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; -import org.springframework.lang.Nullable; +import org.jspecify.annotations.Nullable; @Getter public enum Mode { diff --git a/src/test/java/cucumber/functional_tests/LunaticModelDefinitions.java b/src/test/java/cucumber/functional_tests/LunaticModelDefinitions.java index efb5916c..462e7849 100644 --- a/src/test/java/cucumber/functional_tests/LunaticModelDefinitions.java +++ b/src/test/java/cucumber/functional_tests/LunaticModelDefinitions.java @@ -26,7 +26,7 @@ import lombok.extern.slf4j.Slf4j; import org.assertj.core.api.Assertions; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; diff --git a/src/test/java/cucumber/functional_tests/RawDataDefinitions.java b/src/test/java/cucumber/functional_tests/RawDataDefinitions.java index 137ffd4a..0583211f 100644 --- a/src/test/java/cucumber/functional_tests/RawDataDefinitions.java +++ b/src/test/java/cucumber/functional_tests/RawDataDefinitions.java @@ -29,7 +29,8 @@ import lombok.extern.slf4j.Slf4j; import org.assertj.core.api.Assertions; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; @@ -51,6 +52,7 @@ @Slf4j @ContextConfiguration(classes = CucumberSpringConfiguration.class) +@AutoConfigureTestRestTemplate public class RawDataDefinitions { diff --git a/src/test/java/cucumber/functional_tests/config/CucumberSpringConfiguration.java b/src/test/java/cucumber/functional_tests/config/CucumberSpringConfiguration.java index 81c8ef3d..9a2425d3 100644 --- a/src/test/java/cucumber/functional_tests/config/CucumberSpringConfiguration.java +++ b/src/test/java/cucumber/functional_tests/config/CucumberSpringConfiguration.java @@ -1,20 +1,12 @@ package cucumber.functional_tests.config; import fr.insee.genesis.GenesisApi; -import fr.insee.genesis.infrastructure.repository.ContextualExternalVariableMongoDBRepository; -import fr.insee.genesis.infrastructure.repository.ContextualPreviousVariableMongoDBRepository; -import fr.insee.genesis.infrastructure.repository.DataProcessingContextMongoDBRepository; -import fr.insee.genesis.infrastructure.repository.LastJsonExtractionMongoDBRepository; -import fr.insee.genesis.infrastructure.repository.LunaticJsonMongoDBRepository; -import fr.insee.genesis.infrastructure.repository.LunaticModelMongoDBRepository; -import fr.insee.genesis.infrastructure.repository.QuestionnaireMetadataMongoDBRepository; -import fr.insee.genesis.infrastructure.repository.RundeckExecutionDBRepository; -import fr.insee.genesis.infrastructure.repository.SurveyUnitMongoDBRepository; -import fr.insee.genesis.infrastructure.repository.VariableTypeMongoDBRepository; +import fr.insee.genesis.infrastructure.repository.*; import io.cucumber.spring.CucumberContextConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration; -import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration; +import org.springframework.boot.data.mongodb.autoconfigure.DataMongoAutoConfiguration; +import org.springframework.boot.mongodb.autoconfigure.MongoAutoConfiguration; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.test.context.ActiveProfiles; @@ -23,7 +15,8 @@ @CucumberContextConfiguration @SpringBootTest(classes = GenesisApi.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @ActiveProfiles("test-cucumber") -@EnableAutoConfiguration(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class}) +@EnableAutoConfiguration(exclude = {MongoAutoConfiguration.class, DataMongoAutoConfiguration.class}) +@AutoConfigureTestRestTemplate public class CucumberSpringConfiguration { @MockitoBean private MongoTemplate mongoTemplate; diff --git a/src/test/java/fr/insee/genesis/controller/rest/ControllerAccessTest.java b/src/test/java/fr/insee/genesis/controller/rest/ControllerAccessTest.java index 1d29e9fa..bd9d65d8 100644 --- a/src/test/java/fr/insee/genesis/controller/rest/ControllerAccessTest.java +++ b/src/test/java/fr/insee/genesis/controller/rest/ControllerAccessTest.java @@ -3,16 +3,7 @@ import fr.insee.genesis.domain.ports.api.DataProcessingContextApiPort; import fr.insee.genesis.domain.ports.api.LunaticJsonRawDataApiPort; import fr.insee.genesis.domain.ports.api.SurveyUnitApiPort; -import fr.insee.genesis.infrastructure.repository.ContextualExternalVariableMongoDBRepository; -import fr.insee.genesis.infrastructure.repository.ContextualPreviousVariableMongoDBRepository; -import fr.insee.genesis.infrastructure.repository.DataProcessingContextMongoDBRepository; -import fr.insee.genesis.infrastructure.repository.LastJsonExtractionMongoDBRepository; -import fr.insee.genesis.infrastructure.repository.LunaticJsonMongoDBRepository; -import fr.insee.genesis.infrastructure.repository.LunaticModelMongoDBRepository; -import fr.insee.genesis.infrastructure.repository.QuestionnaireMetadataMongoDBRepository; -import fr.insee.genesis.infrastructure.repository.RundeckExecutionDBRepository; -import fr.insee.genesis.infrastructure.repository.SurveyUnitMongoDBRepository; -import fr.insee.genesis.infrastructure.repository.VariableTypeMongoDBRepository; +import fr.insee.genesis.infrastructure.repository.*; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -22,10 +13,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration; -import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.data.mongodb.autoconfigure.DataMongoAutoConfiguration; +import org.springframework.boot.mongodb.autoconfigure.MongoAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.webmvc.test.autoconfigure.AutoConfigureMockMvc; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.http.HttpMethod; import org.springframework.security.core.authority.SimpleGrantedAuthority; @@ -50,11 +41,10 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - @SpringBootTest @AutoConfigureMockMvc @ActiveProfiles("test") -@EnableAutoConfiguration(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class}) +@EnableAutoConfiguration(exclude = {MongoAutoConfiguration.class, DataMongoAutoConfiguration.class}) class ControllerAccessTest { // Constants for user roles From 54ad8fece0033f0c9d844fc54618bbac729d579d Mon Sep 17 00:00:00 2001 From: Alexis Szmundy <150004193+alexisszmundy@users.noreply.github.com> Date: Thu, 11 Dec 2025 09:32:13 +0100 Subject: [PATCH 3/6] fix: pom --- pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6059eb58..5625b6fc 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,6 @@ 2.8.14 1.6.3 7.33.0 - 5.13.4 0.8.14 From 7404735a042853859aa130ab5777b2f8f4dfc11e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 5 Jan 2026 07:33:42 +0000 Subject: [PATCH 4/6] fix(deps): update dependency org.springdoc:springdoc-openapi-starter-webmvc-ui to v3 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 87ca7026..e7020f6c 100644 --- a/pom.xml +++ b/pom.xml @@ -16,7 +16,7 @@ 21 - 2.8.15 + 3.0.1 1.6.3 7.33.0 5.13.4 From 1094df270bbb674341f2e1abfd6bb593d5ae298a Mon Sep 17 00:00:00 2001 From: QDIBYS Date: Wed, 21 Jan 2026 14:11:21 +0100 Subject: [PATCH 5/6] fix: now we need actuator apparently --- pom.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pom.xml b/pom.xml index a7d7acd1..55cab95d 100644 --- a/pom.xml +++ b/pom.xml @@ -62,6 +62,10 @@ org.springframework.boot spring-boot-starter-cache + + org.springframework.boot + spring-boot-starter-actuator + org.springframework.boot From beb4c31f145e3cd3b0ee7de5e885c44848a85098 Mon Sep 17 00:00:00 2001 From: QDIBYS Date: Mon, 26 Jan 2026 10:16:47 +0100 Subject: [PATCH 6/6] chore: replaced jackson and spring security deprecated --- .../auth/security/RoleConfiguration.java | 18 ++++-------------- .../utils/ExtendedJsonNormalizer.java | 2 +- 2 files changed, 5 insertions(+), 15 deletions(-) diff --git a/src/main/java/fr/insee/genesis/configuration/auth/security/RoleConfiguration.java b/src/main/java/fr/insee/genesis/configuration/auth/security/RoleConfiguration.java index ad1e2e39..aa004bff 100644 --- a/src/main/java/fr/insee/genesis/configuration/auth/security/RoleConfiguration.java +++ b/src/main/java/fr/insee/genesis/configuration/auth/security/RoleConfiguration.java @@ -1,14 +1,14 @@ package fr.insee.genesis.configuration.auth.security; import jakarta.annotation.PostConstruct; +import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler; -import org.springframework.security.access.expression.method.MethodSecurityExpressionHandler; import org.springframework.security.access.hierarchicalroles.RoleHierarchy; import org.springframework.security.access.hierarchicalroles.RoleHierarchyImpl; +import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; import java.util.ArrayList; import java.util.HashMap; @@ -16,6 +16,7 @@ import java.util.Map; @Configuration +@EnableMethodSecurity @Slf4j public class RoleConfiguration { @@ -41,10 +42,7 @@ public class RoleConfiguration { private List batchGenericClaims; - public Map> getRolesByClaim() { - return rolesByClaim; - } - + @Getter private Map> rolesByClaim; //Defines a role hierarchy @@ -67,14 +65,6 @@ static RoleHierarchy roleHierarchy() { .build(); } - // and, if using pre-post method security also add - @Bean - static MethodSecurityExpressionHandler methodSecurityExpressionHandler(RoleHierarchy roleHierarchy) { - DefaultMethodSecurityExpressionHandler expressionHandler = new DefaultMethodSecurityExpressionHandler(); - expressionHandler.setRoleHierarchy(roleHierarchy); - return expressionHandler; - } - @PostConstruct public void initialization() { diff --git a/src/main/java/fr/insee/genesis/controller/utils/ExtendedJsonNormalizer.java b/src/main/java/fr/insee/genesis/controller/utils/ExtendedJsonNormalizer.java index 6bb1c4bd..87c15506 100644 --- a/src/main/java/fr/insee/genesis/controller/utils/ExtendedJsonNormalizer.java +++ b/src/main/java/fr/insee/genesis/controller/utils/ExtendedJsonNormalizer.java @@ -32,7 +32,7 @@ public static JsonNode normalize(JsonNode node) { } ObjectNode copy = obj.objectNode(); - obj.fields().forEachRemaining(e -> + obj.properties().forEach(e -> copy.set(e.getKey(), normalize(e.getValue())) ); return copy;