java - Windows Server 2012、Apache Tomcat、Spring MVC : Websocket connection blocked for external IP

标签 java spring spring-mvc tomcat windows-server

我们已经在 Windows Server 2012 上部署了我们的 Spring MVC 网络应用程序。我们的网络应用使用 Spring Websockets 通过 stomp.jssock.js 进行更新。

我们的websocket配置:

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

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

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

}

Websocket 在 localhost 上运行,日志如下:

Opening Web Socket...
Web Socket Opened...
>>> CONNECT
accept-version:1.1,1.0
heart-beat:10000,10000

<<< CONNECTED
version:1.1
heart-beat:0,0
user-name:admin

connected to server undefined

>>> SUBSCRIBE
id:sub-0
destination:/topic/resident

...

奇怪的是,当我输入外部 ip 时它不起作用,在同一台机器和浏览器上:

Opening Web Socket...
WebSocket connection to 'ws://192.168.5.50:8080/autopark/add/629/i148hb1c/websocket' failed: WebSocket is closed before the connection is established.
Whoops! Lost connection to undefined

我们认为对于外部访问,有一些防火墙并且完全禁用了它:

enter image description here

但这并没有解决我们的问题。


我们如何解决这个问题?

最佳答案

我不太确定,也不是 spring 专家。

但似乎您需要通过其 ip 地址通过域名调用服务器,这是合乎逻辑的。

由于一个 ip 将用于多个域,因此上下文似乎需要知道在 spring 上下文中应该调用哪个上下文(即使是一个)。

换句话说,通过 ip 调用上下文会使 spring 上下文混淆以选择/调用哪个上下文/域,因此它拒绝连接。

尝试一下,将 192.168.5.50 绑定(bind)到一个域名,然后尝试使用该域(而不是 ip)调用该路径。希望它能以这种方式工作。

关于java - Windows Server 2012、Apache Tomcat、Spring MVC : Websocket connection blocked for external IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43395903/

相关文章:

java - Spring Web Application - 如何从页面 Controller 到业务层

java - 使用 Spring Data Rest 时公开所有 ID

java - 了解 Future 的可中断取消

java - 如何制作一个没有重复元素的下拉列表?

java - Java 中的文本数组

java - 如何注销 Spring WebFlux WebClient 请求的失败响应正文,同时将响应返回给调用者?

java - 如何在 Spring Boot Kotlin 项目中修复 "Unresolved reference: java"?

java - 如何从jdbc用户服务获取用户信息

java - 如何在 Java 中计算和打印字符串数组中的重复字符串?

java - 如何从 Java 迭代器中随机访问数据