2016-09-22 17 views
1

SUBSCRIBEリクエストを受け入れるSpring Websocket Stompアプリケーションがあります。私はSUBSCRIBEのハンドラを持つアプリケーションでSpring websocket STOMP eventHandlerからの退会

、それは、私がサブスクリプションを検証するために使用

@Component 
public class SubscribeStompEventHandler implements ApplicationListener<SessionSubscribeEvent> { 

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

です。

現在のユーザーがそのサブスクリプションを見ることができないなど、サブスクリプションが無効な場合は、Broker(私はSimpleMessagingBrokerを使用します)がそのサブスクリプションを「忘れる」ことを望みます。

私の質問は以下のとおりです。私は、着信メッセージインターセプタにサブスクリプション要求の取り扱いを移動し、メッセージの伝播を停止した場合

  • 私は、ブローカーがサブスクリプションを登録しないようにすることはできますか?

  • 他に、このイベントハンドラからサブスクリプションをキャンセルするために使用できるものはありますか?

+0

http://stackoverflow.com/questions/21554230/how-to-reject-topic-subscription-based-on-user-rightsあなたの迎撃

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

詳しい情報をregistrateする必要があります-with-spring-websocket – jahra

答えて

1

ChannelInterceptorを実装する必要があります。 ChannelInterceptorAdapterを延長し、preSend(Message<?> message, MessageChannel channel)を上書きしてください。ここでは、検証のためのセッション情報を持つヘッダーにアクセスできます。また、あなたはここにHow to reject topic subscription based on user rights with Spring-websocket

+0

いいね。私がpreSendからnullを返して投げていないかどうか知っていますか?それは同じ効果になりますか? –

+0

'AbstractMessageChannel.ChannelInterceptorChain.applyPreSend'メソッドを見ることができます。インターセプタからのメッセージがない場合は、フラグをfalseに設定するだけです。あなたは何が起こるかわからないので、それを試してみてください。@ AskarIbragimov – jahra

関連する問題