2016-02-08 4 views
2

Развертывание приложения Spring Boot в WebSphere. Из-за их конфигурации SSL нам необходимо явно указать SSLSocketFactory, чтобы убедиться, что приложение использует сертификаты WebSphere, а не стандартные хранилища Java/доверительные хранилища.Spring Boot AsyncRestTemplate SSLSocketFactory

Делать это с помощью RestTemplate прост:

protected RestTemplate getRestTemplate() { 

    SSLSocketFactory sslSocketFactory = new SSLSocketFactory(
     (javax.net.ssl.SSLSocketFactory) javax.net.ssl.SSLSocketFactory.getDefault(), 
     SSLSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER 
    ); 

    SchemeRegistry registry = new SchemeRegistry(); 
    registry.register(new Scheme(HTTP_SCHEME, HTTP_PORT, PlainSocketFactory.getSocketFactory())); 
    registry.register(new Scheme(HTTPS_SCHEME, HTTPS_PORT, sslSocketFactory)); 

    BasicClientConnectionManager connectionManager = new BasicClientConnectionManager(registry); 
    DefaultHttpClient httpClient = new DefaultHttpClient(connectionManager); 
    ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); 

    return new RestTemplate(requestFactory); 
} 

Однако с AsyncRestTemplate, я не могу найти, как установить SSLSocketFactory:

protected AsyncRestTemplate getAsyncRestTemplate() throws IOReactorException, NoSuchAlgorithmException { 

    SSLIOSessionStrategy strategy = new SSLIOSessionStrategy(
     SSLContext.getDefault(), 
     SSLSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER 
    ); 

    Registry<SchemeIOSessionStrategy> registry = RegistryBuilder.<SchemeIOSessionStrategy>create() 
     .register(HTTP_SCHEME, NoopIOSessionStrategy.INSTANCE) 
     .register(HTTPS_SCHEME, strategy) 
     .build(); 

    PoolingNHttpClientConnectionManager connManager = new PoolingNHttpClientConnectionManager(
     new DefaultConnectingIOReactor(), 
     registry 
    ); 

    CloseableHttpAsyncClient httpClient = HttpAsyncClientBuilder 
     .create() 
     .setConnectionManager(connManager) 
     .build(); 

    AsyncClientHttpRequestFactory requestFactory = new HttpComponentsAsyncClientHttpRequestFactory(httpClient); 

    return new AsyncRestTemplate(requestFactory); 
} 

В сущности, мне нужно позвонить:

(javax.net.ssl.SSLSocketFactory) javax.net.ssl.SSLSocketFactory.getDefault() 

Каким образом WebSphere активирует SSL-соединение вручную нг.

Любые идеи о том, что мне не хватает, очень ценятся - спасибо.

ответ

3

Вы не можете. javax.net.SocketFactory несовместим с моделями ввода-вывода на основе NIO. Нет способа использовать SSLContext для неблокирующего SSL.

Смежные вопросы