22.20. 고급 사용
HTTP 생산자에 대한 더 많은 제어가 필요한 경우, 다양한 클래스를 설정하여 사용자 지정 동작을 제공할 수 있는 HttpComponent
를 사용해야 합니다.
22.20.1. HTTP 클라이언트의 SSL 설정
JSSE 구성 유틸리티 사용
HTTP 구성 요소는 Camel JSSE 구성 유틸리티를 통해 SSL/TLS 구성을 지원합니다. 이 유틸리티는 작성하는 데 필요한 구성 요소별 코드의 양을 크게 줄이고 엔드포인트 및 구성 요소 수준에서 구성할 수 있습니다. 다음 예제에서는 HTTP 구성 요소에서 유틸리티를 사용하는 방법을 보여줍니다.
구성 요소의 프로그래밍 구성
KeyStoreParameters ksp = new KeyStoreParameters(); ksp.setResource("/users/home/server/keystore.jks"); ksp.setPassword("keystorePassword"); KeyManagersParameters kmp = new KeyManagersParameters(); kmp.setKeyStore(ksp); kmp.setKeyPassword("keyPassword"); SSLContextParameters scp = new SSLContextParameters(); scp.setKeyManagers(kmp); HttpComponent httpComponent = getContext().getComponent("https", HttpComponent.class); httpComponent.setSslContextParameters(scp);
끝점의 Spring DSL 기반 구성
<camel:sslContextParameters id="sslContextParameters"> <camel:keyManagers keyPassword="keyPassword"> <camel:keyStore resource="/users/home/server/keystore.jks" password="keystorePassword"/> </camel:keyManagers> </camel:sslContextParameters> <to uri="https://127.0.0.1/mail/?sslContextParameters=#sslContextParameters"/>
Apache HTTP 클라이언트 직접 구성
기본적으로 camel-http 구성 요소는 Apache HttpClient 를 기반으로 합니다. 자세한 내용은 SSL/TLS 사용자 지정 을 참조하거나 org.apache.camel.component.http.HttpsServerTestSupport
클래스를 살펴보십시오.
사용자 지정 org.apache.camel.component.http.HttpClientConfigurer
를 구현하여 완전한 제어가 필요한 경우 http 클라이언트에서 일부 구성을 수행할 수도 있습니다.
그러 나 키 저장소 및 truststore를 지정하려면 Apache HTTP HttpClientConfigurer
을 사용하여 이 작업을 수행할 수 있습니다. 예를 들면 다음과 같습니다.
KeyStore keystore = ...; KeyStore truststore = ...; SchemeRegistry registry = new SchemeRegistry(); registry.register(new Scheme("https", 443, new SSLSocketFactory(keystore, "mypassword", truststore)));
그런 다음 HttpClientConfigurer
을 구현 하는 클래스를 만들고 위의 예제당 키 저장소 또는 truststore를 제공 하는 https 프로토콜을 등록 해야 합니다.And then you need to create a class that implements HttpClientConfigurer , and register https protocol providing a keystore or truststore per example above. 그런 다음 camel 경로 빌더 클래스에서 다음과 같이 연결할 수 있습니다.
HttpComponent httpComponent = getContext().getComponent("http", HttpComponent.class); httpComponent.setHttpClientConfigurer(new MyHttpClientConfigurer());
Spring DSL을 사용하여 이를 수행하는 경우 URI를 사용하여 HttpClientConfigurer
를 지정할 수 있습니다. 예를 들면 다음과 같습니다.
<bean id="myHttpClientConfigurer" class="my.https.HttpClientConfigurer"> </bean> <to uri="https://myhostname.com:443/myURL?httpClientConfigurer=myHttpClientConfigurer"/>
위에서 설명한 대로 HttpClientConfigurer를 구현하고 키 저장소 및 truststore를 구성하는 한, 작업이 잘 작동합니다.As long you implement the HttpClientConfigurer and configure your keystore and truststore as described above, it will work fine.
HTTPS를 사용하여 인증 gotchas
최종 사용자는 HTTPS로 인증하는 데 문제가 있다고 보고했습니다. 결국 사용자 정의 구성된 org.apache.http.protocol.HttpContext
를 제공하여 문제가 해결되었습니다.
- 1. HttpContext에 대한 (Spring) 팩토를 생성합니다.
public class HttpContextFactory { private String httpHost = "localhost"; private String httpPort = 9001; private BasicHttpContext httpContext = new BasicHttpContext(); private BasicAuthCache authCache = new BasicAuthCache(); private BasicScheme basicAuth = new BasicScheme(); public HttpContext getObject() { authCache.put(new HttpHost(httpHost, httpPort), basicAuth); httpContext.setAttribute(ClientContext.AUTH_CACHE, authCache); return httpContext; } // getter and setter }
- 2. Spring 애플리케이션 컨텍스트 파일에서 HttpContext를 선언합니다.
<bean id="myHttpContext" factory-bean="httpContextFactory" factory-method="getObject"/>
- 3. http URL의 컨텍스트를 참조합니다.
<to uri="https://myhostname.com:443/myURL?httpContext=myHttpContext"/>
다른 SSLContextParameters 사용
HTTP 구성 요소는 구성 요소당 org.apache.camel.support.jsse.SSLContextParameters
인스턴스를 하나만 지원합니다. 두 개 이상의 다른 인스턴스를 사용해야 하는 경우 다음과 같이 여러 HTTP 구성 요소를 설정해야 합니다. 구성 요소가 2개 있는 경우 각 구성 요소는 각각 sslContextParameters
속성의 자체 인스턴스를 사용합니다.
<bean id="http-foo" class="org.apache.camel.component.http.HttpComponent"> <property name="sslContextParameters" ref="sslContextParams1"/> <property name="x509HostnameVerifier" ref="hostnameVerifier"/> </bean> <bean id="http-bar" class="org.apache.camel.component.http.HttpComponent"> <property name="sslContextParameters" ref="sslContextParams2"/> <property name="x509HostnameVerifier" ref="hostnameVerifier"/> </bean>