如何限制客户端连接到我的stomp websocket处理程序?

3

我需要跟踪用户在Spring 4.x中打开websocket到我的stomp broker的情况。 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处理程序。

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生成等效的配置。

我非常感谢在这个问题上的帮助。


如果有人能帮忙Java配置: https://stackoverflow.com/questions/25641837/spring-java-config-for-custom-websocket-handshake-on-stomp-endpoint - Alessandro Polverini

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接