Authentication Basic 로 인증되는 서버에서 제공하는 API를 이용 하는 중 Spring RestTemplate 활용 방법
[환경]
Spring-4.1.6
HttpClient-4.3.5
1. 호출 URL 에서 인증 하는 방법
Map<String, Object> resultMap = ezRestTemplate.get("http://admin:1234@localhost:12345/api/overview", HashMap.class);
2. 설정 부분에서 인증 하는 방법
[설정]
import java.security.KeyManagementException; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import javax.net.ssl.SSLContext; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.HttpClient; import org.apache.http.conn.ssl.AllowAllHostnameVerifier; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.conn.ssl.SSLContexts; import org.apache.http.conn.ssl.TrustSelfSignedStrategy; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.client.HttpClientBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.ImportResource; import org.springframework.http.client.ClientHttpRequestFactory; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; import pe.kr.ddakker.framework.support.wrapper.http.EzRestTemplate; @ImportResource("classpath:config/spring/context-*.xml") @Configuration public class ApplicationContext { @Bean(name = "ezRestTemplate") public EzRestTemplate getEzRestTemplate() throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException { SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null, new TrustSelfSignedStrategy()).useTLS().build(); SSLConnectionSocketFactory connectionFactory = new SSLConnectionSocketFactory(sslContext, new AllowAllHostnameVerifier()); BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider(); credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("admin", "1234")); HttpClient httpClient = HttpClientBuilder.create() .setSSLSocketFactory(connectionFactory) .setDefaultCredentialsProvider(credentialsProvider) .build(); ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); return new EzRestTemplate(new RestTemplate(requestFactory)); } }
[사용]
// EzRestTemplate 는 RestTemplate 감쌓놓은 Wrapper Class임. @Resource EzRestTemplate ezRestTemplate; Map<String, Object> resultMap = ezRestTemplate.get("http://localhost:12345/api/overview", HashMap.class); System.out.println("resultMap: " + resultMap);