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" 该订阅,或者最好根本不注册它.
我的问题是:
如果我将订阅请求的处理移至传入消息拦截器并停止消息传播,我能否让 Broker 不注册订阅?
此事件处理程序还可以使用什么来取消订阅?
您需要创建 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
我有一个接受 SUBSCRIBE 请求的 Spring Websocket Stomp 应用程序。
在应用程序中,我有一个 SUBSCRIBE 处理程序,即
@Component
public class SubscribeStompEventHandler implements ApplicationListener<SessionSubscribeEvent> {
@Override
public void onApplicationEvent(SessionSubscribeEvent event) {}
}
我用来验证订阅。
如果订阅无效,例如,当前用户看不到该订阅,我希望 Broker(我使用 SimpleMessagingBroker)"forget" 该订阅,或者最好根本不注册它.
我的问题是:
如果我将订阅请求的处理移至传入消息拦截器并停止消息传播,我能否让 Broker 不注册订阅?
此事件处理程序还可以使用什么来取消订阅?
您需要创建 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