2

我需要跟踪在 Spring 4.x 中向我的 stomp 代理打开 websocket 的用户。stomp 端点以通常的方式配置:

@Configuration
@EnableWebSocketMessageBroker
public class StompWebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

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

  @Override
  public void configureMessageBroker(MessageBrokerRegistry registry) {
    registry.setApplicationDestinationPrefixes("/app")
            .enableSimpleBroker("/queue", "/topic");
  }

}

我尝试实现 ApplicationListener 接口以接收 SessionConnectEvent SessionConnectedEvent 但我无法从这些事件中获取远程主机 ip。

我应该如何让客户端的 ip 连接到我的服务?

我的目标是限制从同一个 ip 到我的 websocket 处理程序的连接数。

4

1 回答 1

2

这样做的方法是自定义 HandshakeHandler 和覆盖函数,如 isvalidOrigin。

要使用 XML 配置添加 HandshakeHandler,可以使用如下代码段:

  <bean id="customHandler" class="my.CustomWebsocketHandshakeHandler"/>

  <websocket:message-broker application-destination-prefix="/app">
    <websocket:stomp-endpoint path="/Stomp">
      <websocket:handshake-handler ref="customHandler"/>
    </websocket:stomp-endpoint>
    <websocket:simple-broker prefix="/topic,/queue" />
  </websocket:message-broker>

不过,我无法使用 Java Config 生成等效配置。

我将非常感谢在该主题上提供的帮助

于 2014-09-03T21:51:13.363 回答