Spring Websocket Stomp 处理 CONNECT 帧
Spring Websocket Stomp handle CONNECT frame
有什么方法可以拦截Spring中的STOMP CONNECT
帧并在某些情况下拒绝它吗?
拦截本身可以使用 SessionConnectEvent
完成,但我想允许或拒绝基于 headers 的连接。我无法在 SessionConnectEvent
侦听器中执行此操作。
如果我们看一下 StompSubProtocolHandler
代码,我们会看到:
try {
SimpAttributesContextHolder.setAttributesFromMessage(message);
if (this.eventPublisher != null) {
if (StompCommand.CONNECT.equals(headerAccessor.getCommand())) {
publishEvent(new SessionConnectEvent(this, message, user));
}
........
outputChannel.send(message);
}
因此,CONNECT
帧不仅作为 SessionConnectEvent
发出,而且还发送到 clientInboundChannel
。
因此,要实现您的要求,您只需提供带有 preSend
实现的自定义 ChannelInterceptor
并将其注册为覆盖 WebSocketMessageBrokerConfigurer.configureClientInboundChannel
.
有什么方法可以拦截Spring中的STOMP CONNECT
帧并在某些情况下拒绝它吗?
拦截本身可以使用 SessionConnectEvent
完成,但我想允许或拒绝基于 headers 的连接。我无法在 SessionConnectEvent
侦听器中执行此操作。
如果我们看一下 StompSubProtocolHandler
代码,我们会看到:
try {
SimpAttributesContextHolder.setAttributesFromMessage(message);
if (this.eventPublisher != null) {
if (StompCommand.CONNECT.equals(headerAccessor.getCommand())) {
publishEvent(new SessionConnectEvent(this, message, user));
}
........
outputChannel.send(message);
}
因此,CONNECT
帧不仅作为 SessionConnectEvent
发出,而且还发送到 clientInboundChannel
。
因此,要实现您的要求,您只需提供带有 preSend
实现的自定义 ChannelInterceptor
并将其注册为覆盖 WebSocketMessageBrokerConfigurer.configureClientInboundChannel
.