我需要跟踪用户在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处理程序的连接数。
答案 0 :(得分: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生成等效配置。
我非常感谢这个主题的帮助