use of com.backbase.stream.webclient.configuration.DbsWebClientConfigurationProperties in project stream-services by Backbase.
the class DbsWebClientConfigurationTest method testWebClient.
@Test
public void testWebClient() {
String tokenUri = "http://localhost:" + PORT + "/api/token-converter/oauth/token";
ClientRegistration clientRegistration = ClientRegistration.withRegistrationId("dbs").clientAuthenticationMethod(ClientAuthenticationMethod.POST).clientId("bb-client").clientSecret("bb-secret").authorizationGrantType(AuthorizationGrantType.CLIENT_CREDENTIALS).tokenUri(tokenUri).build();
DbsWebClientConfiguration dbsWebClientConfiguration = new DbsWebClientConfiguration();
DateFormat dateFormat = dbsWebClientConfiguration.dateFormat();
ObjectMapper objectMapper = dbsWebClientConfiguration.objectMapper(dateFormat);
List<ClientRegistration> registrations = Collections.singletonList(clientRegistration);
InMemoryReactiveClientRegistrationRepository registrationRepository = new InMemoryReactiveClientRegistrationRepository(registrations);
InMemoryReactiveOAuth2AuthorizedClientService clientService = new InMemoryReactiveOAuth2AuthorizedClientService(registrationRepository);
AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager oAuth2AuthorizedClientManager = new AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager(registrationRepository, clientService);
ClientCredentialsReactiveOAuth2AuthorizedClientProvider clientProvider = new ClientCredentialsReactiveOAuth2AuthorizedClientProvider();
oAuth2AuthorizedClientManager.setAuthorizedClientProvider(clientProvider);
WebClient.Builder builder = WebClient.builder();
WebClient webClient = dbsWebClientConfiguration.dbsWebClient(objectMapper, oAuth2AuthorizedClientManager, builder, new DbsWebClientConfigurationProperties());
Assertions.assertNotNull(webClient);
String testUrl = "http://localhost:" + PORT + "/hello-world";
Mono<ClientResponse> exchange = webClient.get().uri(testUrl).exchange().doOnNext(clientResponse -> {
log.info("Client Response Status: " + clientResponse.rawStatusCode());
}).onErrorResume(HttpClientErrorException.class, error -> {
log.error("Client Error Response: " + error.getResponseBodyAsString());
return Mono.error(error);
});
StepVerifier.create(exchange).expectNextCount(1).verifyComplete();
}
use of com.backbase.stream.webclient.configuration.DbsWebClientConfigurationProperties in project stream-services by Backbase.
the class AbstractServiceIntegrationTests method setupWebClientBuilder.
/**
* Setup Web Client Builder to allow integration tests without Spring.
*/
protected WebClient setupWebClientBuilder(String tokenUri, String clientId, String clientSecret) {
Hooks.onOperatorDebug();
DateFormat dateFormat = dbsWebClientConfiguration.dateFormat();
ObjectMapper objectMapper = dbsWebClientConfiguration.objectMapper(dateFormat);
ClientRegistration clientRegistration = ClientRegistration.withRegistrationId("dbs").clientAuthenticationMethod(ClientAuthenticationMethod.POST).clientId(clientId).clientSecret(clientSecret).authorizationGrantType(AuthorizationGrantType.CLIENT_CREDENTIALS).tokenUri(tokenUri).build();
WebClient.Builder builder = WebClient.builder();
List<ClientRegistration> registrations = Collections.singletonList(clientRegistration);
InMemoryReactiveClientRegistrationRepository registrationRepository = new InMemoryReactiveClientRegistrationRepository(registrations);
InMemoryReactiveOAuth2AuthorizedClientService clientService = new InMemoryReactiveOAuth2AuthorizedClientService(registrationRepository);
AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager oAuth2AuthorizedClientManager = new AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager(registrationRepository, clientService);
oAuth2AuthorizedClientManager.setAuthorizedClientProvider(new ClientCredentialsReactiveOAuth2AuthorizedClientProvider());
return dbsWebClientConfiguration.dbsWebClient(objectMapper, oAuth2AuthorizedClientManager, builder, new DbsWebClientConfigurationProperties());
}
use of com.backbase.stream.webclient.configuration.DbsWebClientConfigurationProperties in project stream-services-2.0 by Backbase.
the class AbstractServiceIntegrationTests method setupWebClientBuilder.
/**
* Setup Web Client Builder to allow integration tests without Spring.
*/
protected WebClient setupWebClientBuilder(String tokenUri, String clientId, String clientSecret) {
Hooks.onOperatorDebug();
DateFormat dateFormat = dbsWebClientConfiguration.dateFormat();
ObjectMapper objectMapper = dbsWebClientConfiguration.objectMapper(dateFormat);
ClientRegistration clientRegistration = ClientRegistration.withRegistrationId("dbs").clientAuthenticationMethod(ClientAuthenticationMethod.POST).clientId(clientId).clientSecret(clientSecret).authorizationGrantType(AuthorizationGrantType.CLIENT_CREDENTIALS).tokenUri(tokenUri).build();
WebClient.Builder builder = WebClient.builder();
List<ClientRegistration> registrations = Collections.singletonList(clientRegistration);
InMemoryReactiveClientRegistrationRepository registrationRepository = new InMemoryReactiveClientRegistrationRepository(registrations);
InMemoryReactiveOAuth2AuthorizedClientService clientService = new InMemoryReactiveOAuth2AuthorizedClientService(registrationRepository);
AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager oAuth2AuthorizedClientManager = new AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager(registrationRepository, clientService);
oAuth2AuthorizedClientManager.setAuthorizedClientProvider(new ClientCredentialsReactiveOAuth2AuthorizedClientProvider());
return dbsWebClientConfiguration.dbsWebClient(objectMapper, oAuth2AuthorizedClientManager, builder, new DbsWebClientConfigurationProperties());
}
use of com.backbase.stream.webclient.configuration.DbsWebClientConfigurationProperties in project stream-services-2.0 by Backbase.
the class DbsWebClientConfiguration method dbsWebClient.
/**
* Default Reactive Web Client to be used when interacting with DBS Services. Requires OAuth2 client credentials set
* in application.yml
*
* @param objectMapper The Jackson Object mapper to register serialization and deserialization json
* content.
* @param reactiveOAuth2AuthorizedClientManager Client Manager managing OAuth2 tokens
* @param builder THe Web Client Builder which is already preconfigured using MicroMeter
* instrumentation.
* @return Preconfigured Web Client
*/
@Bean
public WebClient dbsWebClient(ObjectMapper objectMapper, ReactiveOAuth2AuthorizedClientManager reactiveOAuth2AuthorizedClientManager, WebClient.Builder builder, DbsWebClientConfigurationProperties dbsWebClientConfigurationProperties) {
ServerOAuth2AuthorizedClientExchangeFilterFunction oauth2ClientFilter = new ServerOAuth2AuthorizedClientExchangeFilterFunction(reactiveOAuth2AuthorizedClientManager);
oauth2ClientFilter.setDefaultClientRegistrationId(dbsWebClientConfigurationProperties.getDefaultClientRegistrationId());
builder.defaultHeader("Content-Type", MediaType.APPLICATION_JSON.toString()).defaultHeader("Accept", MediaType.APPLICATION_JSON.toString()).filter((clientRequest, exchangeFunction) -> {
final ClientRequest newRequest = Optional.ofNullable(dbsWebClientConfigurationProperties.getAdditionalHeaders()).map(additionalHeaders -> {
log.debug("Adding additional headers: {} from configuration Request: {}", additionalHeaders, clientRequest.url());
return ClientRequest.from(clientRequest).headers(httpHeaders -> httpHeaders.addAll(additionalHeaders)).build();
}).orElse(clientRequest);
return Mono.subscriberContext().flatMap(context -> {
Optional<MultiValueMap<String, String>> forwardHeaders = context.<MultiValueMap<String, String>>getOrEmpty(CONTEXT_KEY_FORWARDED_HEADERS);
log.debug("context contains headers? " + forwardHeaders.isPresent());
log.debug("forward headers:" + forwardHeaders.map(MultiValueMap::toString).orElse("null"));
ClientRequest contextRequest = context.<MultiValueMap<String, String>>getOrEmpty("headers").map(headers -> {
log.debug("Adding additional headers: {} from Reactive subscriber context to Request: {}", headers, clientRequest.url());
return ClientRequest.from(newRequest).headers(httpHeaders -> httpHeaders.addAll(headers)).build();
}).orElse(newRequest);
return exchangeFunction.exchange(contextRequest);
});
}).filter(new CsrfClientExchangeFilterFunction()).filter(oauth2ClientFilter);
if (log.isDebugEnabled()) {
HttpClient httpClient = HttpClient.create().wiretap("reactor.netty.http.client.HttpClient", LogLevel.DEBUG, AdvancedByteBufFormat.TEXTUAL);
builder.clientConnector(new ReactorClientHttpConnector(httpClient));
}
// ensure correct exchange strategy is installed
ExchangeStrategies strategies = ExchangeStrategies.builder().codecs(clientDefaultCodecsConfigurer -> {
Jackson2JsonEncoder encoder = new Jackson2JsonEncoder(objectMapper, MediaType.APPLICATION_JSON);
Jackson2JsonDecoder decoder = new Jackson2JsonDecoder(objectMapper, MediaType.APPLICATION_JSON);
clientDefaultCodecsConfigurer.defaultCodecs().jackson2JsonEncoder(encoder);
clientDefaultCodecsConfigurer.defaultCodecs().jackson2JsonDecoder(decoder);
}).build();
builder.exchangeStrategies(strategies);
return builder.build();
}
use of com.backbase.stream.webclient.configuration.DbsWebClientConfigurationProperties in project stream-services-2.0 by Backbase.
the class DbsWebClientConfigurationTest method testWebClient.
@Test
public void testWebClient() {
String tokenUri = "http://localhost:" + PORT + "/api/token-converter/oauth/token";
ClientRegistration clientRegistration = ClientRegistration.withRegistrationId("dbs").clientAuthenticationMethod(ClientAuthenticationMethod.POST).clientId("bb-client").clientSecret("bb-secret").authorizationGrantType(AuthorizationGrantType.CLIENT_CREDENTIALS).tokenUri(tokenUri).build();
DbsWebClientConfiguration dbsWebClientConfiguration = new DbsWebClientConfiguration();
DateFormat dateFormat = dbsWebClientConfiguration.dateFormat();
ObjectMapper objectMapper = dbsWebClientConfiguration.objectMapper(dateFormat);
List<ClientRegistration> registrations = Collections.singletonList(clientRegistration);
InMemoryReactiveClientRegistrationRepository registrationRepository = new InMemoryReactiveClientRegistrationRepository(registrations);
InMemoryReactiveOAuth2AuthorizedClientService clientService = new InMemoryReactiveOAuth2AuthorizedClientService(registrationRepository);
AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager oAuth2AuthorizedClientManager = new AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager(registrationRepository, clientService);
ClientCredentialsReactiveOAuth2AuthorizedClientProvider clientProvider = new ClientCredentialsReactiveOAuth2AuthorizedClientProvider();
oAuth2AuthorizedClientManager.setAuthorizedClientProvider(clientProvider);
WebClient.Builder builder = WebClient.builder();
WebClient webClient = dbsWebClientConfiguration.dbsWebClient(objectMapper, oAuth2AuthorizedClientManager, builder, new DbsWebClientConfigurationProperties());
Assertions.assertNotNull(webClient);
String testUrl = "http://localhost:" + PORT + "/hello-world";
Mono<ClientResponse> exchange = webClient.get().uri(testUrl).exchange().doOnNext(clientResponse -> {
log.info("Client Response Status: " + clientResponse.rawStatusCode());
}).onErrorResume(HttpClientErrorException.class, error -> {
log.error("Client Error Response: " + error.getResponseBodyAsString());
return Mono.error(error);
});
StepVerifier.create(exchange).expectNextCount(1).verifyComplete();
}
Aggregations