Spring websocket STOMP 取消订阅 eventHandler

Spring websocket STOMP Unsubscribe from eventHandler

我有一个接受 SUBSCRIBE 请求的 Spring Websocket Stomp 应用程序。

在应用程序中,我有一个 SUBSCRIBE 处理程序,即

 @Component
 public class SubscribeStompEventHandler implements ApplicationListener<SessionSubscribeEvent> {

    @Override
    public void onApplicationEvent(SessionSubscribeEvent event) {}
 }

我用来验证订阅。

如果订阅无效,例如,当前用户看不到该订阅,我希望 Broker(我使用 SimpleMessagingBroker)"forget" 该订阅,或者最好根本不注册它.

我的问题是:

您需要创建 ChannelInterceptor 实现。只需扩展 ChannelInterceptorAdapter 并覆盖 preSend(Message<?> message, MessageChannel channel)。在这里您可以访问 headers 和 session 信息以进行验证。你还需要注册你的拦截器

@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
    registry.configureBrokerChannel().interceptors(new YourInterceptor())
    registry.enableSimpleBroker("/queue/", "/topic/");
    registry.setApplicationDestinationPrefixes("/app");
}

这里有更多信息How to reject topic subscription based on user rights with Spring-websocket