首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弹簧靴AsyncRestTemplate SSLSocketFactory

弹簧靴AsyncRestTemplate SSLSocketFactory
EN

Stack Overflow用户
提问于 2016-02-08 13:21:10
回答 1查看 2K关注 0票数 3

在WebSphere中部署Spring应用程序。由于它们的SSL配置,我们需要显式地指定SSLSocketFactory,以确保应用程序使用WebSphere证书,而不是默认的Java /信任存储。

通过RestTemplate这样做很简单:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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);
}

本质上,我需要打电话给:

代码语言:javascript
复制
(javax.net.ssl.SSLSocketFactory) javax.net.ssl.SSLSocketFactory.getDefault()

这将触发WebSphere覆盖SSL连接处理。

任何关于我所缺少的东西的想法都是非常感谢的--谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-09 10:20:41

你不能。javax.net.SocketFactory与基于NIO的i/o模型不兼容。使用SSLContext进行非阻塞SSL是没有办法的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35270709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档