2016-09-22 4 views
1

У меня есть приложение Spring Stspocket Stomp, которое принимает запросы SUBSCRIBE.Spring websocket STOMP Отказаться от eventHandler

В приложении У меня есть обработчик для ПОДПИСАТЬСЯ, то есть

@Component 
public class SubscribeStompEventHandler implements ApplicationListener<SessionSubscribeEvent> { 

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

, что я использую для проверки подписки.

В случае, если подписка недействительна, например, текущий пользователь не может видеть эту подписку, я хотел бы, чтобы Брокер (я использую SimpleMessagingBroker), чтобы «забыть» эту подписку или, желательно, не регистрировать ее вообще.

Моих вопросов:

  • Могу ли я сделать брокер не зарегистрировать подписку, если я перееду обработку запроса подписки на поступающий перехватчик сообщений и остановить распространение сообщений?

  • Что еще можно использовать для этого обработчика событий для отмены подписки?

+0

http://stackoverflow.com/questions/21554230/how-to-reject-topic-subscription-based-on-user-rights -with-spring-websocket – jahra

ответ

1

Вам необходимо создать вас ChannelInterceptor осуществления. Просто увеличьте ChannelInterceptorAdapter и переопределите preSend(Message<?> message, MessageChannel channel). Здесь вы получите доступ к заголовкам с информацией о сеансе для проверки. Кроме того, вы должны ваш Interceptor Зарегистрируйтесь

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

Более подробная информация здесь How to reject topic subscription based on user rights with Spring-websocket

+0

Выглядит хорошо. Знаете ли вы, что я возвращаю null из preSend и не бросаю, это будет тот же эффект? –

+0

Вы можете посмотреть на 'AbstractMessageChannel.ChannelInterceptorChain.applyPreSend' метод. Он просто устанавливает флаг в false, если сообщение не приходит от перехватчика. Лучше попробуй, потому что я не знаю, что будет. @ АскарИбрагимов – jahra