Spring websocket STOMP取消订阅eventHandler

时间:2016-09-22 14:04:41

标签: java spring stomp spring-websocket

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

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

find_package(FOO NO_MODULE)

我用它来验证订阅。

如果订阅无效,例如,当前用户看不到该订阅,我希望Broker(我使用SimpleMessagingBroker)来"忘记"该订阅,或者最好不要注册它。

我的问题是:

  • 如果我将订阅请求处理到传入的消息拦截器并停止消息传播,我可以让Broker不注册订阅吗?

  • 此事件处理程序还可以使用哪些内容来取消订阅?

1 个答案:

答案 0 :(得分:5)

您需要创建ChannelInterceptor实施。只需展开ChannelInterceptorAdapter并覆盖preSend(Message<?> message, MessageChannel channel)即可。在这里,您将可以访问包含会话信息的标题以进行验证。你还需要注册你的拦截器

@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