Spring WebSocket (Stomp) Клиентский прокси

Я пытаюсь использовать WebSocketStompClient из Spring. Мне нужно установить прокси для доступа к серверу STOMP. Пробовал обычным socksProxySet, socksProxyHost, socksProxyPort безуспешно.

У вас есть идеи, как установить прокси для WebSocket(Stomp)Client?


person Daniel    schedule 22.03.2016    source источник


Ответы (2)


Я знаю, что это довольно старый вопрос. Тем не менее, я хотел бы дать новый ответ, поскольку он может помочь всем, кто случайно наткнулся на ту же проблему.

Вы можете предоставить свой собственный 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);
}
person Ben    schedule 19.07.2018

Если это Stomp-over-Websocket и если у вас есть собственный брокер Stomp, такой как RabbitMQ с подключаемыми модулями расширения, вы можете использовать:

https://docs.spring.io/spring/docs/current/spring-framework-reference/html/websocket.html#websocket-stomp-handle-broker-relay

Примечание. По умолчанию не нравятся сообщения размером > 8 КБ.

person Arno Venner    schedule 08.08.2017
comment
Используйте ссылки только в качестве ссылок, поскольку они могут меняться со временем. Пожалуйста, вставьте основную часть ответа сюда. - person krishan; 08.08.2017