diff --git a/pom.xml b/pom.xml index edb420fd..55cab95d 100644 --- a/pom.xml +++ b/pom.xml @@ -11,15 +11,14 @@ org.springframework.boot spring-boot-starter-parent - 3.5.9 + 4.0.0 21 - 2.8.15 + 3.0.1 1.6.3 7.33.0 - 5.13.4 0.8.14 @@ -63,6 +62,10 @@ org.springframework.boot spring-boot-starter-cache + + org.springframework.boot + spring-boot-starter-actuator + org.springframework.boot @@ -74,6 +77,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/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/rest/responses/ResponseController.java b/src/main/java/fr/insee/genesis/controller/rest/responses/ResponseController.java index cb6c1f48..9b4f3682 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 @@ -36,10 +36,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/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; 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 b3ce4303..9845ff34 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 @@ -3,7 +3,7 @@ import com.fasterxml.jackson.annotation.JsonCreator; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; -import org.springframework.lang.Nullable; +import org.jspecify.annotations.Nullable; import java.util.HashMap; import java.util.Map; diff --git a/src/test/java/cucumber/functional_tests/LunaticModelDefinitions.java b/src/test/java/cucumber/functional_tests/LunaticModelDefinitions.java index 16e9c0cd..a68bf28d 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 ffe661b0..0d9191c3 100644 --- a/src/test/java/cucumber/functional_tests/RawDataDefinitions.java +++ b/src/test/java/cucumber/functional_tests/RawDataDefinitions.java @@ -37,7 +37,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.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -62,6 +63,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 45c92bc2..26d67c4b 100644 --- a/src/test/java/cucumber/functional_tests/config/CucumberSpringConfiguration.java +++ b/src/test/java/cucumber/functional_tests/config/CucumberSpringConfiguration.java @@ -12,8 +12,9 @@ import fr.insee.genesis.infrastructure.repository.SurveyUnitMongoDBRepository; 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; @@ -22,7 +23,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 7591fb83..75c039a8 100644 --- a/src/test/java/fr/insee/genesis/controller/rest/ControllerAccessTest.java +++ b/src/test/java/fr/insee/genesis/controller/rest/ControllerAccessTest.java @@ -24,10 +24,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; @@ -52,11 +52,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