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