Spring WebSocket(Stomp)客户端代理

4

我正在尝试使用Spring的WebSocketStompClient。我需要设置代理以访问STOMP服务器。我尝试了通常的socksProxySet,socksProxyHost,socksProxyPort,但没有成功。

你有任何想法如何为WebSocket(Stomp)Client设置代理吗?

2个回答

1
我知道这是一个相当古老的问题。尽管如此,我想给出一个新的答案,因为它可能对那些偶然遇到相同问题的人有所帮助。
您可以提供自己的RestTemplate,并将代理正确配置到您的stomp客户端中:
@Bean
public WebSocketStompClient client() {
    StandardWebSocketClient client = new StandardWebSocketClient();
    List<Transport> webSocketTransports = Arrays.asList(new WebSocketTransport(client),  new RestTemplateXhrTransport(getRestTemplate()));
    SockJsClient sockJsClient = new SockJsClient(webSocketTransports);
    WebSocketStompClient stompClient = new WebSocketStompClient(sockJsClient);
    stompClient.setAutoStartup(true);
    stompClient.setMessageConverter(new MappingJackson2MessageConverter());
    return stompClient;
}

// Rest template with proxy configuration
private RestTemplate getRestTemplate() {
    HttpClientBuilder clientBuilder = HttpClientBuilder.create();
    if (environment.getProperty("http.proxySet", boolean.class, false)) {
        String proxyHost = environment.getProperty("http.proxyHost");
        String proxyUser = environment.getProperty("http.proxyUser");
        String proxyPassword = environment.getProperty("http.proxyPassword");
        Integer proxyPort = environment.getProperty("http.proxyPort", Integer.class);
        CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(
                new AuthScope(proxyHost, proxyPort),
                new UsernamePasswordCredentials(proxyUser, proxyPassword));

        HttpHost myProxy = new HttpHost(proxyHost, proxyPort);
        clientBuilder.setProxy(myProxy)
                .setProxyAuthenticationStrategy(new ProxyAuthenticationStrategy())
                .setDefaultCredentialsProvider(credentialsProvider);
    }

    HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
    factory.setHttpClient(clientBuilder.build());
    return new RestTemplate(factory);
}

0

3
只使用链接作为参考,因为它们可能会随时间变化而改变。请在此处粘贴答案的核心部分。 - krishan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接