2

Spring 4.x で、ユーザーが自分の stomp ブローカーに対して Websocket を開いていることを追跡する必要があります。ストンプ エンドポイントは、通常の方法で構成されます。

@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");
  }

}

SessionConnectEvent SessionConnectedEvent を受信するために ApplicationListener インターフェイスを実装しようとしましたが、これらのイベントからリモート ホストの 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 に答える