From f170687cb855e8406eddececbe2c12842652322c Mon Sep 17 00:00:00 2001 From: Peter Siegmund Date: Fri, 1 Nov 2024 22:51:03 +0100 Subject: [PATCH] new cool stuff Signed-off-by: Peter Siegmund --- .../dev/mars3142/fhq/client/AuthClient.java | 9 +++++++ .../mars3142/fhq/config/RestClientConfig.java | 27 ++++++++++++++----- .../config/interceptor/AuthInterceptor.java | 19 +++++++++++++ 3 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 src/main/java/dev/mars3142/fhq/client/AuthClient.java create mode 100644 src/main/java/dev/mars3142/fhq/config/interceptor/AuthInterceptor.java diff --git a/src/main/java/dev/mars3142/fhq/client/AuthClient.java b/src/main/java/dev/mars3142/fhq/client/AuthClient.java new file mode 100644 index 0000000..5c81a82 --- /dev/null +++ b/src/main/java/dev/mars3142/fhq/client/AuthClient.java @@ -0,0 +1,9 @@ +package dev.mars3142.fhq.client; + +import org.springframework.web.service.annotation.GetExchange; + +public interface AuthClient { + + @GetExchange("/v1/auth") + String getAuth(); +} diff --git a/src/main/java/dev/mars3142/fhq/config/RestClientConfig.java b/src/main/java/dev/mars3142/fhq/config/RestClientConfig.java index 3173785..ef7dbd6 100644 --- a/src/main/java/dev/mars3142/fhq/config/RestClientConfig.java +++ b/src/main/java/dev/mars3142/fhq/config/RestClientConfig.java @@ -1,6 +1,9 @@ package dev.mars3142.fhq.config; +import dev.mars3142.fhq.client.AuthClient; import dev.mars3142.fhq.client.TimeZoneClient; +import dev.mars3142.fhq.config.interceptor.AuthInterceptor; +import lombok.val; import org.springframework.boot.web.client.ClientHttpRequestFactories; import org.springframework.boot.web.client.ClientHttpRequestFactorySettings; import org.springframework.cloud.client.loadbalancer.LoadBalanced; @@ -17,22 +20,34 @@ public class RestClientConfig { @LoadBalanced @Bean RestClient.Builder restClientBuilder() { - return RestClient.builder(); + return RestClient.builder() + .requestInterceptor(new AuthInterceptor()); } @Bean - public TimeZoneClient timeZoneClient(RestClient.Builder restClientBuilder) { - RestClient restClient = restClientBuilder + public AuthClient authClient(RestClient.Builder builder) { + val restClient = builder + .baseUrl("http://auth-service") + .requestFactory(getClientRequestFactory()) + .build(); + val restClientAdapter = RestClientAdapter.create(restClient); + val httpServiceProxyFactory = HttpServiceProxyFactory.builderFor(restClientAdapter).build(); + return httpServiceProxyFactory.createClient(AuthClient.class); + } + + @Bean + public TimeZoneClient timeZoneClient(RestClient.Builder builder) { + val restClient = builder .baseUrl("http://timezone-service") .requestFactory(getClientRequestFactory()) .build(); - var restClientAdapter = RestClientAdapter.create(restClient); - var httpServiceProxyFactory = HttpServiceProxyFactory.builderFor(restClientAdapter).build(); + val restClientAdapter = RestClientAdapter.create(restClient); + val httpServiceProxyFactory = HttpServiceProxyFactory.builderFor(restClientAdapter).build(); return httpServiceProxyFactory.createClient(TimeZoneClient.class); } private ClientHttpRequestFactory getClientRequestFactory() { - ClientHttpRequestFactorySettings clientHttpRequestFactorySettings = ClientHttpRequestFactorySettings.DEFAULTS; + val clientHttpRequestFactorySettings = ClientHttpRequestFactorySettings.DEFAULTS; return ClientHttpRequestFactories.get(clientHttpRequestFactorySettings); } } diff --git a/src/main/java/dev/mars3142/fhq/config/interceptor/AuthInterceptor.java b/src/main/java/dev/mars3142/fhq/config/interceptor/AuthInterceptor.java new file mode 100644 index 0000000..f758a7a --- /dev/null +++ b/src/main/java/dev/mars3142/fhq/config/interceptor/AuthInterceptor.java @@ -0,0 +1,19 @@ +package dev.mars3142.fhq.config.interceptor; + +import java.io.IOException; +import lombok.val; +import org.springframework.http.HttpRequest; +import org.springframework.http.client.ClientHttpRequestExecution; +import org.springframework.http.client.ClientHttpRequestInterceptor; +import org.springframework.http.client.ClientHttpResponse; + +public class AuthInterceptor implements ClientHttpRequestInterceptor { + + @Override + public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) + throws IOException { + val headers = request.getHeaders(); + headers.add("X-FHQ-USER-ID", "Vaadin"); + return execution.execute(request, body); + } +}