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.