Skip to content

Commit 69e4877

Browse files
committed
Bump Springboot@3.5.0, fixes JWT issues with refreshToken and others
1 parent 29ca108 commit 69e4877

14 files changed

Lines changed: 118 additions & 70 deletions

File tree

pom.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
<parent>
2525
<groupId>org.springframework.boot</groupId>
2626
<artifactId>spring-boot-starter-parent</artifactId>
27-
<version>3.4.4</version>
27+
<version>3.5.0</version>
2828
<relativePath />
2929
</parent>
3030

@@ -34,12 +34,12 @@
3434
<maven.compiler.target>${java.version}</maven.compiler.target>
3535

3636
<!-- Test-->
37-
<flapdoodle.embed.mongo.version>4.18.0</flapdoodle.embed.mongo.version>
37+
<flapdoodle.embed.mongo.version>4.20.0</flapdoodle.embed.mongo.version>
3838

3939
<!-- Plugins -->
4040
<maven-compiler-plugin.version>3.14.0</maven-compiler-plugin.version>
41-
<sonar-maven-plugin.version>3.10.0.2594</sonar-maven-plugin.version>
42-
<jacoco-maven-plugin.version>0.8.12</jacoco-maven-plugin.version>
41+
<sonar-maven-plugin.version>5.1.0.4751</sonar-maven-plugin.version>
42+
<jacoco-maven-plugin.version>0.8.13</jacoco-maven-plugin.version>
4343

4444
<!-- Sonar -->
4545
<sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>

trackerforce-common-tenancy/src/main/java/com/trackerforce/common/tenant/config/MultiTenantJwtRequestFilter.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import jakarta.servlet.ServletException;
99
import jakarta.servlet.http.HttpServletRequest;
1010
import jakarta.servlet.http.HttpServletResponse;
11+
import lombok.NonNull;
1112
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
1213
import org.springframework.security.core.context.SecurityContextHolder;
1314
import org.springframework.security.web.authentication.WebAuthenticationDetailsSource;
@@ -23,7 +24,8 @@
2324
public class MultiTenantJwtRequestFilter extends JwtRequestFilter {
2425

2526
@Override
26-
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
27+
protected void doFilterInternal(@NonNull HttpServletRequest request,
28+
@NonNull HttpServletResponse response, @NonNull FilterChain filterChain)
2729
throws ServletException, IOException {
2830

2931
final Optional<String> jwt = getJwtFromRequest(request);

trackerforce-common-tenancy/src/main/java/com/trackerforce/common/tenant/config/MultiTenantSecurityConfig.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,12 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
2929
http.sessionManagement(auth -> auth.sessionCreationPolicy(SessionCreationPolicy.STATELESS));
3030
http.csrf(AbstractHttpConfigurer::disable);
3131

32+
http.addFilterBefore(corsFilter(), UsernamePasswordAuthenticationFilter.class);
3233
http.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class);
3334

3435
return http.build();
3536
}
3637

37-
@Bean
3838
public CorsFilter corsFilter() {
3939
var source = new UrlBasedCorsConfigurationSource();
4040
var config = new CorsConfiguration();

trackerforce-common-tenancy/src/main/java/com/trackerforce/common/tenant/config/MultiTenantServiceConfig.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11
package com.trackerforce.common.tenant.config;
22

3-
import org.springframework.beans.factory.annotation.Autowired;
3+
import com.trackerforce.common.tenant.interceptor.TenantInterceptor;
4+
import com.trackerforce.common.tenant.service.IdentityService;
45
import org.springframework.context.annotation.Configuration;
56
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
67
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
78

8-
import com.trackerforce.common.tenant.interceptor.TenantInterceptor;
9-
import com.trackerforce.common.tenant.service.IdentityService;
10-
119
@Configuration
1210
public class MultiTenantServiceConfig implements WebMvcConfigurer {
13-
14-
@Autowired
15-
private IdentityService identityService;
11+
12+
private final IdentityService identityService;
13+
14+
public MultiTenantServiceConfig(IdentityService identityService) {
15+
this.identityService = identityService;
16+
}
1617

1718
@Override
1819
public void addInterceptors(InterceptorRegistry registry) {
Lines changed: 33 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,50 @@
11
package com.trackerforce.common.tenant.config.mongodb;
22

3-
import java.net.UnknownHostException;
4-
3+
import com.mongodb.ConnectionString;
4+
import com.mongodb.MongoClientSettings;
5+
import com.mongodb.client.MongoClient;
6+
import com.mongodb.client.MongoClients;
7+
import jakarta.servlet.http.HttpServletRequest;
58
import org.springframework.beans.factory.annotation.Value;
69
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
710
import org.springframework.context.annotation.Bean;
811
import org.springframework.context.annotation.Configuration;
912
import org.springframework.data.mongodb.MongoDatabaseFactory;
1013

11-
import com.mongodb.client.MongoClient;
12-
import com.mongodb.client.MongoClients;
13-
1414
@Configuration
1515
@ConditionalOnProperty(name = "spring.boot.multitenant.mongodb.enabled", havingValue = "true", matchIfMissing = true)
1616
public class MultitenantMongoDbConfiguration {
17-
18-
@Value("${spring.data.mongodb.uri}")
19-
private String connectionString;
20-
21-
@Value("${spring.data.mongodb.tenant-prefix:${spring.data.mongodb.database}}-")
22-
private String databasePrefix;
2317

24-
@Bean
25-
public MongoClient createMongoClient() throws UnknownHostException {
26-
return MongoClients.create(connectionString);
27-
}
18+
private final String connectionString;
19+
20+
private final String databasePrefix;
21+
22+
private final HttpServletRequest request;
23+
24+
public MultitenantMongoDbConfiguration(
25+
@Value("${spring.data.mongodb.uri}") String connectionString,
26+
@Value("${spring.data.mongodb.tenant-prefix:${spring.data.mongodb.database}}-") String databasePrefix,
27+
HttpServletRequest request) {
28+
this.connectionString = connectionString;
29+
this.databasePrefix = databasePrefix;
30+
this.request = request;
31+
}
2832

2933
@Bean
30-
public MongoDatabaseFactory mongoDbFactory() throws UnknownHostException {
31-
return new MultitenantMongoDbFactory(createMongoClient(), databasePrefix);
34+
public MongoDatabaseFactory mongoDbFactory() {
35+
return new MultitenantMongoDbFactory(createMongoClient(), databasePrefix, request);
3236
}
3337

38+
@Bean
39+
public MongoClient createMongoClient() {
40+
return MongoClients.create(connectionString);
41+
}
42+
43+
@Bean
44+
public MongoClientSettings mongoClientSettings() {
45+
return MongoClientSettings.builder()
46+
.applyConnectionString(new ConnectionString(connectionString))
47+
.build();
48+
}
49+
3450
}

trackerforce-common-tenancy/src/main/java/com/trackerforce/common/tenant/config/mongodb/MultitenantMongoDbFactory.java

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,35 @@
11
package com.trackerforce.common.tenant.config.mongodb;
22

3-
import java.util.Optional;
4-
3+
import com.mongodb.client.MongoClient;
4+
import com.mongodb.client.MongoDatabase;
5+
import com.trackerforce.common.tenant.interceptor.TenantInterceptor;
56
import jakarta.servlet.http.HttpServletRequest;
6-
import org.springframework.beans.factory.annotation.Autowired;
7-
import org.springframework.beans.factory.annotation.Value;
7+
import lombok.NonNull;
88
import org.springframework.dao.DataAccessException;
99
import org.springframework.dao.InvalidDataAccessResourceUsageException;
1010
import org.springframework.data.mongodb.core.SimpleMongoClientDatabaseFactory;
1111

12-
import com.mongodb.client.MongoClient;
13-
import com.mongodb.client.MongoDatabase;
14-
import com.trackerforce.common.tenant.interceptor.TenantInterceptor;
12+
import java.util.Optional;
1513

1614
public class MultitenantMongoDbFactory extends SimpleMongoClientDatabaseFactory {
1715

18-
@Autowired
19-
private HttpServletRequest request;
16+
private final HttpServletRequest request;
2017

21-
@Value("${spring.data.mongodb.tenant-prefix:${spring.data.mongodb.database}}-")
22-
private String databasePrefix;
18+
private final String databasePrefix;
2319

24-
public MultitenantMongoDbFactory(MongoClient mongoClient, String databaseName) {
25-
super(mongoClient, databaseName);
20+
public MultitenantMongoDbFactory(MongoClient mongoClient,
21+
String databasePrefix, HttpServletRequest request) {
22+
super(mongoClient, databasePrefix);
23+
this.databasePrefix = databasePrefix;
24+
this.request = request;
2625
}
2726

2827
@Override
28+
@NonNull
2929
public MongoDatabase getMongoDatabase() throws DataAccessException {
3030
final var tenantId = Optional.ofNullable(request.getAttribute(TenantInterceptor.TENANT_ID));
3131

32-
if (!tenantId.isPresent())
32+
if (tenantId.isEmpty())
3333
throw new InvalidDataAccessResourceUsageException("X-Tenant is missing");
3434

3535
return super.getMongoDatabase(String.format("%s%s", databasePrefix, tenantId.get()));

trackerforce-common-tenancy/src/main/java/com/trackerforce/common/tenant/interceptor/TenantInterceptor.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import jakarta.servlet.http.HttpServletRequest;
77
import jakarta.servlet.http.HttpServletResponse;
8+
import lombok.NonNull;
89
import org.springframework.util.StringUtils;
910
import org.springframework.web.servlet.HandlerInterceptor;
1011

@@ -29,8 +30,8 @@ public TenantInterceptor(IdentityService identityService) {
2930
}
3031

3132
@Override
32-
public boolean preHandle(HttpServletRequest request,
33-
HttpServletResponse response, Object handler) throws Exception {
33+
public boolean preHandle(@NonNull HttpServletRequest request,
34+
@NonNull HttpServletResponse response, @NonNull Object handler) throws Exception {
3435

3536
var allowedEndpoint = isAllowedEndpoint(request);
3637
var tenant = Optional.ofNullable(request.getHeader(RequestHeader.TENANT_HEADER.toString()));

trackerforce-common-tenancy/src/main/java/com/trackerforce/common/tenant/model/ComponentHelper.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.trackerforce.common.tenant.model;
22

3+
import com.trackerforce.common.tenant.model.type.RenderType;
34
import lombok.Data;
45

56
@Data

trackerforce-common-tenancy/src/main/java/com/trackerforce/common/tenant/model/exception/InvalidStatusChangeException.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,9 @@
22

33
import com.trackerforce.common.model.exception.BusinessException;
44

5-
@SuppressWarnings("serial")
65
public class InvalidStatusChangeException extends BusinessException {
76

87
public InvalidStatusChangeException(String from, String to) {
98
super(String.format("Cannot change status from '%s' to '%s'", from, to));
109
}
11-
1210
}

trackerforce-common-tenancy/src/main/java/com/trackerforce/common/tenant/repository/AbstractProjectedDao.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313

1414
import java.util.Arrays;
1515
import java.util.Map;
16-
import java.util.Optional;
1716

1817
public abstract class AbstractProjectedDao<T extends AbstractDocument, R extends MongoRepository<T, String>> {
1918

@@ -38,7 +37,7 @@ public T save(T entity) {
3837
}
3938

4039
/**
41-
* Find one element by Id
40+
* Find one element by ID
4241
*/
4342
public T findByIdProjectedBy(String id, Class<T> entityClass, String... fields) {
4443
var query = Query.query(Criteria.where("id").is(id));

0 commit comments

Comments
 (0)