当前位置: 首页 > 知识库问答 >
问题:

Spring websocket(WSS)在安全web套接字服务器(tomcat)上使用angular sockjs(HTTPS)

吕胤
2023-03-14
@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();
}}
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) => {}

现在我已经在我的web套接字服务器上实现了SSL,该服务器运行在单独的Spring Boot服务器上。和更新协议在服务器和客户端一样。ws到wss,http到HTTPS。

并尝试以下内容来添加SSL上下文

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));

共有1个答案

罗俭
2023-03-14

我们通过同样的问题,首先移除与sockjs类似的

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfigurer implements WebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.enableSimpleBroker("/");
        config.setApplicationDestinationPrefixes("/js");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/").setAllowedOrigins("*");
    }
}

我们的前端是在VUE,但在JS中的连接还是一样的。

    WEB_SOCKET_URL_PREFIX: 'ws://localhost:8080/'

    connect(resolve) {
        const URL = '/somePath';
        this.webSocket = new WebSocket(HttpConfig.WEB_SOCKET_URL_PREFIX);
        this.stompClient = Stomp.over(this.webSocket, { debug: false });

        this.stompClient.connect({}, () => {
            this.stompClient.subscribe(URL, data => {
                console.log(data);
            });
        });
    }

在java代码中,您可以使用

java prettyprint-override">
    private final SimpMessagingTemplate simpMessagingTemplate;

public void someMethod(){

...
 simpMessagingTemplate.convertAndSend("/somePath", "someContent");

...
}
 类似资料:
  • 保护Web服务器安全非常重要,这意味着只允许其他人查看部分信息并保护数据并限制访问。 这些是增强Apache Web服务器安全性的常见内容。 1. 隐藏Apache版本和操作系统信息 Apache显示其版本和操作系统名称错误,如下面的屏幕截图所示。 黑客可以使用此信息使用特定版本的服务器或操作系统中的公开漏洞发起攻击。为了防止Apache webserver显示此信息,我们可以通过修改apache

  • 我们有一个带有gradle build配置的java web应用程序,它包含以下两个模块: > project web。war——包含所有statc文件、js、jsp等。此外,它还包含所有项目、带有rest控制器层的spring配置。 project-main.jar包含了所有的业务 目前,我们正在ApacheTomcat中部署这两个模块。我们的项目正在经历一些架构上的变化 我是Apache ht

  • 目前,我支持具有以下体系结构的客户机,用于工业制造过程: 我已经在PC上设置了一个WAMP服务器和一个示例网页,我可以在PC上的任何浏览器上看到它作为“本地主机”。我知道如何通过WebView类向Android应用程序添加web浏览器视图。 但是我不知道如何让手机上的浏览器通过TCP连接看到PC上的WAMP服务器。我怎么把这两件事联系起来?

  • 我正在尝试使用Ubuntu和Tomcat7.0.52在AWS EC2实例上获得一个CA证书/SSL。浏览器无法连接。以下是我走过的步骤: 将csr提交给ssls.com/geoTrust,并接收返回:bundle.crt www.mydomain.net.crt 将证书导入密钥库: 接下来,更新$TOMCAT_HOME/config/server.xml: 然后重新启动Tomcat。 openss

  • 问题内容: 我敢肯定这是一个简单的问题,但是我不知道socket.io文档在哪里,而http://labs.learnboost.com/socket.io/上的文档并没有真正的帮助。 假设我有一个socket.io http服务器,并写了一个网站来连接它。 我如何为服务器提供保护,以使未经授权的人(未通过网站连接的人)被阻止/丢弃/禁止。 如何在服务器端结束套接字连接?所以如果我有 如何结束套接

  • 我可以通过JavaScript直接将Web套接字连接到我的PHP守护进程服务器:var websocket = new WebSocket(“ws://IP:PORT”);这将正确握手,但是当我尝试nginx代理 http://IP 它无法接收Sec-WebSocket-Key的标头值并且握手失败。 -最近更新:JavaScript根本无法连接,原因是:语法错误:指定了无效或非法的字符串! 变量: