我正在使用Spring WebSocket + Stomp + SockJS Client在服务器端向Angular客户端应用程序发送消息。
我的Socket服务器是一个Spring Boot应用程序,运行在8080端口。
它在ws/http协议上的工作正常,但现在我已经在Socket服务器上启用了SSL。
Socket服务器配置。
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/topic");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/sync").setAllowedOrigins("*").withSockJS();
}}
Java客户端通过WS工作的代码
List<Transport> transports = new ArrayList<Transport>(1);
transports.add(new RestTemplateXhrTransport());
SockJsClient sockJsClient = new SockJsClient(transports);
sockJsClient.setMessageCodec(new Jackson2SockJsMessageCodec());
WebSocketStompClient stompClient = new WebSocketStompClient(sockJsClient);
stompClient.setMessageConverter(new StringMessageConverter());
String url = "ws://my-socket.server.com/sync";
StompSessionHandler sessionHandler = new MyStompSessionHandler(senderId, syncUrl, content);
stompClient.connect(url, sessionHandler);
使用HTTP的Angular客户端的工作代码
const Stomp = StompJs.Stomp;
const socket = new SockJS('http://my-socket.server.com/sync');
this.stompClient = Stomp.over(socket);
this.stompClient.connect({}, (res, err) => {}
现在我已经在运行独立的Spring Boot服务器上实现了Web Socket服务器的SSL,并在服务器和客户端端更新协议,例如 ws to wss 和 http to https。
同时尝试以下操作以添加SSL Context。
StandardWebSocketClient simpleWebSocketClient = new StandardWebSocketClient();
List<Transport> transports = new ArrayList<Transport>(1);
Map<String, Object> userProperties = new HashMap<String, Object>();
userProperties.put("org.apache.tomcat.websocket.SSL_CONTEXT", SSLContext.getDefault());
simpleWebSocketClient.setUserProperties(userProperties);
transports.add(new WebSocketTransport(simpleWebSocketClient));
我参考了以下的堆栈链接,但没有成功 :(
如何使用HTTPS(SSL)安全地使用Web套接字
如何在Spring WebSocketClient中使用SSL?
请帮我摆脱困境。谢谢 :)