package org.springframework.security.oauth.consumer.client; import org.springframework.http.client.ClientHttpRequestFactory; import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.security.oauth.consumer.OAuthConsumerSupport; import org.springframework.security.oauth.consumer.ProtectedResourceDetails; import org.springframework.web.client.RestTemplate; /** * Rest template that is able to make OAuth-authenticated REST requests with the credentials of the provided resource. * * @author Ryan Heaton */ public class OAuthRestTemplate extends RestTemplate { private final ProtectedResourceDetails resource; private OAuthConsumerSupport support = new CoreOAuthConsumerSupport(); public OAuthRestTemplate(ProtectedResourceDetails resource) { this(new SimpleClientHttpRequestFactory(), resource); } public OAuthRestTemplate(ClientHttpRequestFactory requestFactory, ProtectedResourceDetails resource) { super(); if (resource == null) { throw new IllegalArgumentException("An OAuth resource must be supplied."); } if (support == null) { throw new IllegalArgumentException("OAuth support must be supplied."); } this.resource = resource; setRequestFactory(requestFactory); } @Override public void setRequestFactory(ClientHttpRequestFactory requestFactory) { if (!(requestFactory instanceof OAuthClientHttpRequestFactory)) { requestFactory = new OAuthClientHttpRequestFactory(requestFactory, getResource(), getSupport()); } super.setRequestFactory(requestFactory); } public ProtectedResourceDetails getResource() { return resource; } /** * The support logic to use. * * @return The support logic to use. */ public OAuthConsumerSupport getSupport() { return support; } /** * The support logic to use. * * @param support The support logic to use. */ public void setSupport(OAuthConsumerSupport support) { this.support = support; } }