
org.cloudfoundry.spring.util.network.OAuth2RestTemplateBuilder Maven / Gradle / Ivy
The newest version!
// Generated by delombok at Sat Jun 18 07:22:04 PDT 2016
/*
* Copyright 2013-2016 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.cloudfoundry.spring.util.network;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.deser.DeserializationProblemHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.security.oauth2.client.OAuth2ClientContext;
import org.springframework.security.oauth2.client.OAuth2RestTemplate;
import org.springframework.security.oauth2.client.resource.OAuth2ProtectedResourceDetails;
import org.springframework.security.oauth2.client.token.grant.password.ResourceOwnerPasswordAccessTokenProvider;
import org.springframework.util.Assert;
import org.springframework.web.client.RestTemplate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL;
public final class OAuth2RestTemplateBuilder {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private OAuth2ClientContext clientContext;
private HostnameVerifier hostnameVerifier;
private List> messageConverters = new ArrayList<>();
private List problemHandlers = new ArrayList<>();
private OAuth2ProtectedResourceDetails protectedResourceDetails;
private SSLContext sslContext;
public OAuth2RestTemplate build() {
OAuth2RestTemplate restTemplate = getRestTemplate(this.clientContext, this.protectedResourceDetails);
addLogging(restTemplate);
addMessageConverters(restTemplate, this.messageConverters);
modifyObjectMapper(getObjectMapper(restTemplate), this.problemHandlers, this.logger);
setRequestFactory(restTemplate, this.hostnameVerifier, this.sslContext);
return restTemplate;
}
public OAuth2RestTemplateBuilder messageConverter(HttpMessageConverter> messageConverter) {
this.messageConverters.add(messageConverter);
return this;
}
public OAuth2RestTemplateBuilder problemHandler(DeserializationProblemHandler problemHandler) {
this.problemHandlers.add(problemHandler);
return this;
}
private static void addLogging(RestTemplate restTemplate) {
restTemplate.getInterceptors().add(new LoggingClientHttpRequestInterceptor());
}
private static void addMessageConverters(RestTemplate restTemplate, List> httpMessageConverters) {
for (HttpMessageConverter> httpMessageConverter : httpMessageConverters) {
restTemplate.getMessageConverters().add(httpMessageConverter);
}
}
private static ResourceOwnerPasswordAccessTokenProvider getAccessTokenProvider(ClientHttpRequestFactory requestFactory) {
ResourceOwnerPasswordAccessTokenProvider accessTokenProvider = new ResourceOwnerPasswordAccessTokenProvider();
accessTokenProvider.setRequestFactory(requestFactory);
return accessTokenProvider;
}
private static Optional getObjectMapper(RestTemplate restTemplate) {
for (HttpMessageConverter> messageConverter : restTemplate.getMessageConverters()) {
if (messageConverter instanceof MappingJackson2HttpMessageConverter) {
ObjectMapper objectMapper = ((MappingJackson2HttpMessageConverter) messageConverter).getObjectMapper();
return Optional.of(objectMapper);
}
}
return Optional.empty();
}
private static OAuth2RestTemplate getRestTemplate(OAuth2ClientContext clientContext, OAuth2ProtectedResourceDetails protectedResourceDetails) {
Assert.notNull(clientContext, "clientContext must not be null");
Assert.notNull(protectedResourceDetails, "protectedResourceDetails must not be null");
return new OAuth2RestTemplate(protectedResourceDetails, clientContext);
}
private static void modifyObjectMapper(Optional objectMapper, List problemHandlers, Logger logger) {
objectMapper.ifPresent(objectMapper1 -> {
logger.debug("Modifying ObjectMapper configuration");
objectMapper1.setSerializationInclusion(NON_NULL);
problemHandlers.forEach(objectMapper1::addHandler);
});
}
private static void setRequestFactory(OAuth2RestTemplate restTemplate, HostnameVerifier hostnameVerifier, SSLContext sslContext) {
if (hostnameVerifier != null && sslContext != null) {
CustomSslSimpleClientHttpRequestFactory requestFactory = new CustomSslSimpleClientHttpRequestFactory(hostnameVerifier, sslContext);
restTemplate.setRequestFactory(requestFactory);
restTemplate.setAccessTokenProvider(getAccessTokenProvider(requestFactory));
}
}
@java.lang.SuppressWarnings("all")
@javax.annotation.Generated("lombok")
public OAuth2RestTemplateBuilder clientContext(final OAuth2ClientContext clientContext) {
this.clientContext = clientContext;
return this;
}
@java.lang.SuppressWarnings("all")
@javax.annotation.Generated("lombok")
public OAuth2RestTemplateBuilder hostnameVerifier(final HostnameVerifier hostnameVerifier) {
this.hostnameVerifier = hostnameVerifier;
return this;
}
@java.lang.SuppressWarnings("all")
@javax.annotation.Generated("lombok")
public OAuth2RestTemplateBuilder messageConverters(final List> messageConverters) {
this.messageConverters = messageConverters;
return this;
}
@java.lang.SuppressWarnings("all")
@javax.annotation.Generated("lombok")
public OAuth2RestTemplateBuilder problemHandlers(final List problemHandlers) {
this.problemHandlers = problemHandlers;
return this;
}
@java.lang.SuppressWarnings("all")
@javax.annotation.Generated("lombok")
public OAuth2RestTemplateBuilder protectedResourceDetails(final OAuth2ProtectedResourceDetails protectedResourceDetails) {
this.protectedResourceDetails = protectedResourceDetails;
return this;
}
@java.lang.SuppressWarnings("all")
@javax.annotation.Generated("lombok")
public OAuth2RestTemplateBuilder sslContext(final SSLContext sslContext) {
this.sslContext = sslContext;
return this;
}
@java.lang.Override
@java.lang.SuppressWarnings("all")
@javax.annotation.Generated("lombok")
public java.lang.String toString() {
return "OAuth2RestTemplateBuilder(logger=" + this.logger + ", clientContext=" + this.clientContext + ", hostnameVerifier=" + this.hostnameVerifier + ", messageConverters=" + this.messageConverters + ", problemHandlers=" + this.problemHandlers + ", protectedResourceDetails=" + this.protectedResourceDetails + ", sslContext=" + this.sslContext + ")";
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy