2017-12-21 39 views
1

포트 8080의 http와 포트 8443의 https가 모두 직접 액세스 할 수있는 Tomcat에 SSL을 설정합니다.이 API는 응용 프로그램 API에서 원하는 응답을 얻습니다 . 그러나 다음 API를 사용하여 동일한 API에 액세스 할 때 NULL이 발생합니다.SSL을 사용하는 Tomcat에서 웹 응용 프로그램 API에 프로그래밍 방식으로 액세스하십시오.

Foo mc = restTemplate.getForObject("http://" + hostName + ":8080" + "/foo" , Foo.class);  

SSL을 설정하지 않은 경우 코드가 작동합니다.

이 문제를 해결하는 방법은 무엇입니까?

답변

0

당신은 HTTPS

여기

에 대한 RestTemplate을 구성해야하는 것은 나는 그것이 작동 얻을 관리 테스트가 귀하의 경우

@Test 
public void httpsTest() throws GeneralSecurityException { 
    HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); 
    DefaultHttpClient httpClient = (DefaultHttpClient) requestFactory.getHttpClient(); 
    TrustStrategy acceptingTrustStrategy = (cert, authType) -> true 
    SSLSocketFactory sf = new SSLSocketFactory(acceptingTrustStrategy, 
     ALLOW_ALL_HOSTNAME_VERIFIER); 
    httpClient.getConnectionManager().getSchemeRegistry() 
     .register(new Scheme("https", 8443, sf)); 

    String urlOverHttps = "https://" + hostName + ":8080" + "/foo"; 
    ResponseEntity<String> response = new RestTemplate(requestFactory). 
     exchange(urlOverHttps, HttpMethod.GET, null, String.class); 
    assertThat(response.getStatusCode().value(), equalTo(200)); 
} 
+1

샘플 코드는 http://www.baeldung.com/httpclient-ssl에서 언급 한 상황 중 하나입니다. "요청한 대상에 대한 유효한 인증 경로를 찾을 수 없습니다"라는 오류가 나타납니다. 더 많은 일을해야합니다. – vic

1

에 대한 모습입니다. 다른 사람들의 이익을 위해 다음과 같은 단계를 나열합니다.

먼저 Spring RestTemplate의 코드 (SSL (HttpClient 4.4) 섹션 this tutoiral)를 추가합니다. (나는 HttpClient 4.5.4를 가지고있다). 나는 휴식 API의 URL 명중 할 때이 변경과 함께, 나는 다음과 같은 예외가 :

I/O error on GET request for "http://localhost:8080/foo": 
    sun.security.validator.ValidatorException: 
    PKIX path building failed: 
    sun.security.provider.certpath.SunCertPathBuilderException: 
    unable to find valid certification path to requested target; 
    nested exception is javax.net.ssl.SSLHandshakeException: 
    sun.security.validator.ValidatorException: 
    PKIX path building failed: 
    sun.security.provider.certpath.SunCertPathBuilderException: 
    unable to find valid certification path to requested targe 

둘째, 위에서 언급 한 예외를 해결하기를, 나는 따르 mkyong의 tutorial. BTW, 자바 프로그램의 링크가 더 이상 유효하지 않습니다. 나는 다른 곳에서 그것을 찾아야한다.