Skip to content

Commit ab76206

Browse files
authored
ref: improve handle of external request with token of user (#282)
1 parent cb4b5a8 commit ab76206

File tree

4 files changed

+25
-32
lines changed

4 files changed

+25
-32
lines changed

src/main/java/fr/insee/pogues/configuration/AppConfiguration.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package fr.insee.pogues.configuration;
22

3+
import fr.insee.pogues.configuration.properties.ApplicationProperties;
34
import fr.insee.pogues.configuration.rest.AuthenticationHelper;
45
import fr.insee.pogues.configuration.rest.WebClientTokenInterceptor;
56
import lombok.extern.slf4j.Slf4j;
@@ -13,6 +14,7 @@
1314
import org.springframework.http.HttpHeaders;
1415
import org.springframework.http.MediaType;
1516
import org.springframework.transaction.annotation.EnableTransactionManagement;
17+
import org.springframework.web.reactive.function.client.ExchangeFilterFunction;
1618
import org.springframework.web.reactive.function.client.WebClient;
1719

1820
@Configuration
@@ -24,7 +26,7 @@
2426
public class AppConfiguration {
2527

2628
@Autowired
27-
private AuthenticationHelper authenticationHelper;
29+
private ExchangeFilterFunction webClientTokenInterceptor;
2830

2931
@Bean
3032
public WebClient webClient(
@@ -33,7 +35,7 @@ public WebClient webClient(
3335
builder
3436
.defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
3537
.defaultHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE);
36-
if(oidcEnabled) builder.filter(new WebClientTokenInterceptor(authenticationHelper));
38+
if(oidcEnabled) builder.filter(webClientTokenInterceptor);
3739
return builder.build();
3840
}
3941

src/main/java/fr/insee/pogues/configuration/properties/ApplicationProperties.java

+2-29
Original file line numberDiff line numberDiff line change
@@ -17,33 +17,6 @@ public record ApplicationProperties(
1717
String description,
1818
String[] publicUrls,
1919
@NotEmpty(message = "cors origins must be specified")
20-
List<String> corsOrigins) {
21-
22-
@Override
23-
public boolean equals(Object o) {
24-
if (this == o) return true;
25-
if (o == null || getClass() != o.getClass()) return false;
26-
ApplicationProperties that = (ApplicationProperties) o;
27-
return Objects.equals(host, that.host)
28-
&& Objects.equals(title, that.title)
29-
&& Objects.equals(description, that.description)
30-
&& Arrays.equals(publicUrls, that.publicUrls);
31-
}
32-
33-
@Override
34-
public int hashCode() {
35-
int result = Objects.hash(host, title, description);
36-
result = 31 * result + Arrays.hashCode(publicUrls);
37-
return result;
38-
}
39-
40-
@Override
41-
public String toString() {
42-
return "ApplicationProperties{" +
43-
"host='" + host + '\'' +
44-
", title='" + title + '\'' +
45-
", description='" + description + '\'' +
46-
", publicUrls=" + Arrays.toString(publicUrls) +
47-
'}';
48-
}
20+
List<String> corsOrigins,
21+
List<String> externalSecureUrls) {
4922
}

src/main/java/fr/insee/pogues/configuration/rest/WebClientTokenInterceptor.java

+16-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package fr.insee.pogues.configuration.rest;
22

3+
import fr.insee.pogues.configuration.properties.ApplicationProperties;
34
import lombok.RequiredArgsConstructor;
45
import lombok.extern.slf4j.Slf4j;
6+
import org.springframework.beans.factory.annotation.Autowired;
7+
import org.springframework.stereotype.Component;
58
import org.springframework.web.reactive.function.client.ClientRequest;
69
import org.springframework.web.reactive.function.client.ClientResponse;
710
import org.springframework.web.reactive.function.client.ExchangeFilterFunction;
@@ -10,12 +13,24 @@
1013

1114
@RequiredArgsConstructor
1215
@Slf4j
16+
@Component
1317
public class WebClientTokenInterceptor implements ExchangeFilterFunction {
1418

15-
private final AuthenticationHelper authenticationHelper;
19+
@Autowired
20+
private AuthenticationHelper authenticationHelper;
21+
22+
@Autowired
23+
private ApplicationProperties applicationProperties;
1624

1725
@Override
1826
public Mono<ClientResponse> filter(ClientRequest request, ExchangeFunction next) {
27+
boolean needToken = applicationProperties.externalSecureUrls().stream()
28+
.filter(secureUrl -> request.url().toString().contains(secureUrl))
29+
.count() > 0;
30+
31+
if(!needToken) return next.exchange(request);
32+
33+
log.debug("Token is necessary to call URI :"+request.url());
1934
String jwt = authenticationHelper.getUserToken();
2035
ClientRequest newRequest = ClientRequest.from(request)
2136
.headers(h -> h.setBearerAuth(jwt))

src/main/resources/application.yaml

+3
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,9 @@ application:
8585
# For Series & operations
8686
magma:
8787

88+
external-secure-urls:
89+
- ${application.metadata.ddi-as}
90+
- ${application.metadata.magma}
8891

8992
springdoc:
9093
swagger-ui:

0 commit comments

Comments
 (0)