Java Windows Server 2012、Apache Tomcat、Spring MVC:外部IP的Websocket连接被阻止

Java Windows Server 2012、Apache Tomcat、Spring MVC:外部IP的Websocket连接被阻止,java,spring,spring-mvc,tomcat,windows-server,Java,Spring,Spring Mvc,Tomcat,Windows Server,我们已经在Windows Server 2012上部署了我们的Spring MVCweb应用程序。我们的web应用程序使用SpringWebSockets更新stomp.js和sock.js 我们的websocket配置: @Configuration @EnableWebSocketMessageBroker public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { @Overrid

我们已经在Windows Server 2012上部署了我们的Spring MVCweb应用程序。我们的web应用程序使用SpringWebSockets更新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在本地主机上工作,日志如下:

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

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

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



我们如何解决这个问题?

我不是很确定,也不是spring专家

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

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

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


使用atry,将
192.168.5.50
绑定到域名,然后尝试使用域(而不是ip)调用路径。希望它能这样工作。

调试的第一步是验证您的应用程序服务器是否正在侦听外部接口

通过在netstat的输出中查找8080个条目,可以验证容器绑定到哪个IP

  • netstat-a-n-o |查找“8080”

    • 如果您没有看到绑定到0.0.0.0或外部IP的条目,那么我们知道这是应用程序服务器的配置问题
    • 嵌入式tomcat示例-
    • 独立tomcat的示例-
下一步应该是验证外部计算机是否可以“看到”外部IP上的端口。有多种方法可以做到这一点,但是使用telnet命令就足够了

  • telnet 192.168.5.50 8080
    • 如果这不起作用,那么我们知道有什么东西阻塞了两个应用程序之间的通信

如果我们达到这一点,那么应用程序本身的配置可能会出现问题。

使用数据包跟踪器(如wireshark)查看您的网络流量。这通常会提供一个非常有用的提示,说明连接失败的原因。@JohnHascall实际上它可以工作
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