Skip to content

Commit 6d7755a

Browse files
authored
feat: Upgrade to spring 3.3 (#133)
### Features - Upgrade to Spring **3.3** and java **21** - Add trailing slash handler filter ### Changes - Replace imports from javax to jakarta - Replace deprecated URL with URI - Update switch structure - Use new `getFirst` method
1 parent 895f75a commit 6d7755a

58 files changed

Lines changed: 277 additions & 224 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎pom.xml‎

Lines changed: 40 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>org.springframework.boot</groupId>
88
<artifactId>spring-boot-starter-parent</artifactId>
9-
<version>2.7.17</version>
9+
<version>3.3.0</version>
1010
<relativePath/> <!-- lookup parent from repository -->
1111
</parent>
1212

@@ -20,7 +20,9 @@
2020
<inceptionYear>2023</inceptionYear>
2121

2222
<properties>
23-
<java.version>1.8</java.version>
23+
<java.version>21</java.version>
24+
<testcontainers.version>1.19.8</testcontainers.version>
25+
<spring-framework.version>6.2.0-M3</spring-framework.version>
2426
</properties>
2527

2628
<licenses>
@@ -52,7 +54,7 @@
5254
<dependency>
5355
<groupId>org.springframework.boot</groupId>
5456
<artifactId>spring-boot-configuration-processor</artifactId>
55-
<version>2.7.6</version>
57+
<version>3.2.6</version>
5658
</dependency>
5759

5860
<!-- Tests -->
@@ -70,25 +72,24 @@
7072
<dependency>
7173
<groupId>org.springframework.security</groupId>
7274
<artifactId>spring-security-test</artifactId>
73-
<version>5.7.7</version>
7475
<scope>test</scope>
7576
</dependency>
7677
<dependency>
7778
<groupId>org.testcontainers</groupId>
7879
<artifactId>testcontainers</artifactId>
79-
<version>1.17.6</version>
80+
<version>${testcontainers.version}</version>
8081
<scope>test</scope>
8182
</dependency>
8283
<dependency>
8384
<groupId>org.testcontainers</groupId>
8485
<artifactId>junit-jupiter</artifactId>
85-
<version>1.17.6</version>
86+
<version>${testcontainers.version}</version>
8687
<scope>test</scope>
8788
</dependency>
8889
<dependency>
8990
<groupId>org.testcontainers</groupId>
9091
<artifactId>postgresql</artifactId>
91-
<version>1.17.6</version>
92+
<version>${testcontainers.version}</version>
9293
<scope>test</scope>
9394
</dependency>
9495

@@ -110,7 +111,7 @@
110111
<dependency>
111112
<groupId>com.giffing.bucket4j.spring.boot.starter</groupId>
112113
<artifactId>bucket4j-spring-boot-starter</artifactId>
113-
<version>0.8.1</version>
114+
<version>0.12.7</version>
114115
</dependency>
115116
<dependency>
116117
<groupId>org.springframework.boot</groupId>
@@ -119,26 +120,26 @@
119120
<dependency>
120121
<groupId>com.github.ben-manes.caffeine</groupId>
121122
<artifactId>caffeine</artifactId>
122-
<version>2.9.3</version>
123+
<version>3.1.8</version>
123124
</dependency>
124125
<dependency>
125126
<groupId>com.github.ben-manes.caffeine</groupId>
126127
<artifactId>jcache</artifactId>
127-
<version>2.9.3</version>
128+
<version>3.1.8</version>
128129
</dependency>
129130

130131
<!-- Docs -->
131132
<dependency>
132133
<groupId>org.springdoc</groupId>
133-
<artifactId>springdoc-openapi-ui</artifactId>
134-
<version>1.7.0</version>
134+
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
135+
<version>2.5.0</version>
135136
</dependency>
136137

137138
<!-- Mapper -->
138139
<dependency>
139140
<groupId>org.modelmapper</groupId>
140141
<artifactId>modelmapper</artifactId>
141-
<version>3.1.1</version>
142+
<version>3.2.0</version>
142143
</dependency>
143144
<dependency>
144145
<groupId>com.github.java-json-tools</groupId>
@@ -148,7 +149,7 @@
148149
<dependency>
149150
<groupId>com.google.guava</groupId>
150151
<artifactId>guava</artifactId>
151-
<version>32.0.0-jre</version>
152+
<version>33.2.1-jre</version>
152153
</dependency>
153154

154155
<!-- Validation -->
@@ -157,13 +158,6 @@
157158
<artifactId>spring-boot-starter-validation</artifactId>
158159
</dependency>
159160

160-
<!-- Hibernate -->
161-
<dependency>
162-
<groupId>com.vladmihalcea</groupId>
163-
<artifactId>hibernate-types-52</artifactId>
164-
<version>2.21.1</version>
165-
</dependency>
166-
167161
<!-- Database/Postgres -->
168162
<dependency>
169163
<groupId>org.postgresql</groupId>
@@ -232,4 +226,29 @@
232226
</plugins>
233227
</build>
234228

229+
<repositories>
230+
<repository>
231+
<id>maven_central</id>
232+
<name>Maven Central</name>
233+
<url>https://repo.maven.apache.org/maven2/</url>
234+
</repository>
235+
<repository>
236+
<id>spring-milestones</id>
237+
<name>Spring Milestones</name>
238+
<url>https://repo.spring.io/milestone</url>
239+
<snapshots>
240+
<enabled>false</enabled>
241+
</snapshots>
242+
</repository>
243+
</repositories>
244+
<pluginRepositories>
245+
<pluginRepository>
246+
<id>spring-milestones</id>
247+
<name>Spring Milestones</name>
248+
<url>https://repo.spring.io/milestone</url>
249+
<snapshots>
250+
<enabled>false</enabled>
251+
</snapshots>
252+
</pluginRepository>
253+
</pluginRepositories>
235254
</project>

‎src/main/java/com/lucasjosino/hawapi/configs/security/SecurityConfig.java‎

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
import org.springframework.context.annotation.Bean;
44
import org.springframework.context.annotation.Configuration;
55
import org.springframework.http.HttpMethod;
6+
import org.springframework.security.config.Customizer;
67
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
7-
import org.springframework.security.config.annotation.web.configurers.oauth2.server.resource.OAuth2ResourceServerConfigurer;
8+
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
9+
import org.springframework.security.config.annotation.web.configurers.HeadersConfigurer;
810
import org.springframework.security.config.http.SessionCreationPolicy;
911
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
1012
import org.springframework.security.crypto.password.PasswordEncoder;
@@ -36,31 +38,27 @@ public class SecurityConfig {
3638
@Bean
3739
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
3840
return http
39-
.headers(req ->
40-
req.frameOptions().sameOrigin()
41+
.headers(req -> req
42+
.frameOptions((HeadersConfigurer.FrameOptionsConfig::sameOrigin))
4143
)
42-
.cors()
43-
.and()
44-
.csrf().disable()
45-
.sessionManagement()
46-
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
47-
.and()
48-
.authorizeRequests(req -> req
44+
.csrf((AbstractHttpConfigurer::disable))
45+
.sessionManagement((session) -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
46+
.authorizeHttpRequests(req -> req
4947
// API Docs
50-
.antMatchers(HttpMethod.GET, "/v3/api-docs", "/v3/api-docs/**").permitAll()
48+
.requestMatchers(HttpMethod.GET, "/v3/api-docs", "/v3/api-docs/**").permitAll()
5149
// Errors
52-
.antMatchers(HttpMethod.GET, "/error").permitAll()
50+
.requestMatchers(HttpMethod.GET, "/error").permitAll()
5351
// Auth
54-
.antMatchers(HttpMethod.POST, "/api/v1/auth/**").permitAll()
52+
.requestMatchers(HttpMethod.POST, "/api/v1/auth/**").permitAll()
5553
// API
56-
.antMatchers(HttpMethod.GET, "/api/**").permitAll()
57-
.antMatchers(HttpMethod.PATCH, "/api/**").hasAnyRole("ADMIN", "MAINTAINER")
58-
.antMatchers(HttpMethod.POST, "/api/**").hasAnyRole("ADMIN", "MAINTAINER")
59-
.antMatchers(HttpMethod.DELETE, "/api/**").hasAnyRole("ADMIN", "MAINTAINER")
54+
.requestMatchers(HttpMethod.GET, "/api/**").permitAll()
55+
.requestMatchers(HttpMethod.PATCH, "/api/**").hasAnyRole("ADMIN", "MAINTAINER")
56+
.requestMatchers(HttpMethod.POST, "/api/**").hasAnyRole("ADMIN", "MAINTAINER")
57+
.requestMatchers(HttpMethod.DELETE, "/api/**").hasAnyRole("ADMIN", "MAINTAINER")
6058
// Others endpoints
6159
.anyRequest().permitAll()
6260
)
63-
.oauth2ResourceServer(OAuth2ResourceServerConfigurer::jwt)
61+
.oauth2ResourceServer((oauth2) -> oauth2.jwt(Customizer.withDefaults()))
6462
.build();
6563
}
6664

‎src/main/java/com/lucasjosino/hawapi/controllers/advisor/ControllerAdvisor.java‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@
1010
import com.lucasjosino.hawapi.exceptions.auth.UserUnauthorizedException;
1111
import com.lucasjosino.hawapi.exceptions.specification.OperatorNotFoundException;
1212
import com.lucasjosino.hawapi.models.http.ExceptionResponse;
13+
import jakarta.servlet.http.HttpServletRequest;
1314
import org.springframework.http.HttpHeaders;
1415
import org.springframework.http.HttpStatus;
16+
import org.springframework.http.HttpStatusCode;
1517
import org.springframework.http.ResponseEntity;
1618
import org.springframework.validation.ObjectError;
1719
import org.springframework.web.bind.MethodArgumentNotValidException;
@@ -23,7 +25,6 @@
2325
import org.springframework.web.context.request.WebRequest;
2426
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
2527

26-
import javax.servlet.http.HttpServletRequest;
2728
import java.time.LocalDateTime;
2829
import java.util.Arrays;
2930
import java.util.Map;
@@ -75,7 +76,7 @@ public ResponseEntity<Object> handleBadRequestException(
7576
protected ResponseEntity<Object> handleMethodArgumentNotValid(
7677
MethodArgumentNotValidException ex,
7778
HttpHeaders headers,
78-
HttpStatus status,
79+
HttpStatusCode status,
7980
WebRequest request
8081
) {
8182
Optional<ObjectError> error = ex.getBindingResult().getAllErrors().stream().findFirst();
@@ -92,7 +93,6 @@ protected ResponseEntity<Object> handleMethodArgumentNotValid(
9293
return handleBadRequestException(new BadRequestException(message), servletRequest);
9394
}
9495

95-
9696
@ExceptionHandler(SaveConflictException.class)
9797
public ResponseEntity<Object> handleConflictException(
9898
SaveConflictException ex,

‎src/main/java/com/lucasjosino/hawapi/controllers/api/v1/OverviewController.java‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
import org.springframework.web.bind.annotation.RestController;
2222
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
2323

24-
import javax.annotation.PostConstruct;
24+
import jakarta.annotation.PostConstruct;
25+
2526
import java.io.IOException;
2627
import java.util.Collections;
2728
import java.util.List;

‎src/main/java/com/lucasjosino/hawapi/controllers/interfaces/BaseAuthControllerInterface.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import org.springframework.web.bind.annotation.PostMapping;
1212
import org.springframework.web.bind.annotation.RequestBody;
1313

14-
import javax.validation.Valid;
14+
import jakarta.validation.Valid;
1515

1616
/**
1717
* A base auth controller interface with all required endpoints.

‎src/main/java/com/lucasjosino/hawapi/controllers/interfaces/BaseControllerInterface.java‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
import org.springframework.http.ResponseEntity;
1111
import org.springframework.web.bind.annotation.*;
1212

13-
import javax.validation.Valid;
13+
import jakarta.validation.Valid;
14+
1415
import java.io.IOException;
1516
import java.util.List;
1617
import java.util.Map;

‎src/main/java/com/lucasjosino/hawapi/controllers/interfaces/BaseOverviewControllerInterface.java‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
import org.springframework.http.ResponseEntity;
1010
import org.springframework.web.bind.annotation.*;
1111

12-
import javax.validation.Valid;
12+
import jakarta.validation.Valid;
13+
1314
import java.io.IOException;
1415
import java.util.List;
1516

‎src/main/java/com/lucasjosino/hawapi/controllers/interfaces/BaseTranslationInterface.java‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
import org.springframework.http.ResponseEntity;
1010
import org.springframework.web.bind.annotation.*;
1111

12-
import javax.validation.Valid;
12+
import jakarta.validation.Valid;
13+
1314
import java.io.IOException;
1415
import java.util.List;
1516
import java.util.UUID;

‎src/main/java/com/lucasjosino/hawapi/controllers/interfaces/SocialControllerInterface.java‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
import org.springframework.http.ResponseEntity;
99
import org.springframework.web.bind.annotation.*;
1010

11-
import javax.validation.Valid;
11+
import jakarta.validation.Valid;
12+
1213
import java.io.IOException;
1314
import java.util.List;
1415
import java.util.UUID;

‎src/main/java/com/lucasjosino/hawapi/filters/http/SnakeCaseFilter.java‎

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,12 @@
44
import org.springframework.context.annotation.Configuration;
55
import org.springframework.web.filter.OncePerRequestFilter;
66

7-
import javax.servlet.FilterChain;
8-
import javax.servlet.ServletException;
9-
import javax.servlet.http.HttpServletRequest;
10-
import javax.servlet.http.HttpServletRequestWrapper;
11-
import javax.servlet.http.HttpServletResponse;
7+
import jakarta.servlet.FilterChain;
8+
import jakarta.servlet.ServletException;
9+
import jakarta.servlet.http.HttpServletRequest;
10+
import jakarta.servlet.http.HttpServletRequestWrapper;
11+
import jakarta.servlet.http.HttpServletResponse;
12+
1213
import java.io.IOException;
1314
import java.util.Collections;
1415
import java.util.Enumeration;

0 commit comments

Comments
 (0)