有没有办法在Spring中拦截STOMPCONNECT
帧并在某些条件下拒绝它?拦截本身可以使用SessionConnectEvent
完成,但我想根据标头允许或拒绝连接。我不能在SessionConnectEvent
侦听器中执行此操作。
如果我们查看StompSubProtocol colHandler
代码,我们会看到:
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
发出,而且还被发送到clientIn的Channel
。
因此,您需要实现您的需求的只是提供一个自定义的ChannelInterceptor
与presend
实现并注册它覆盖WebSocketMessageBrokerConfigrer. configureClientInendendChannel
。