Я использую spring-websocket и spring-messaging (версия 4.2.2.RELEASE) для реализации STOMP над веб-сайтами с полнофункциональным брокером (Apache ActiveMQ 5.10.0).
Мои клиенты предназначены для ПОДПИСАТЬ только в пункты назначения - то есть они должны не иметь возможности отправлять сообщения SEND. Кроме того, я хотел бы реализовать более строгий контроль над тем, на какие адресаты могут подписаться мои клиенты. В любом случае (то есть, когда клиент пытается отправить сообщение или подписаться на недопустимое назначение) Я хотел бы быть в состоянииКак закрыть веб-узел STOMP на весеннем сервере
- отправить соответствующее сообщение об ошибке, и/или
- закрыть WebSocket
Обратите внимание, что все пункты назначения отправляются в ActiveMQ. Я думал, что смогу реализовать ChannelInterceptor на входящем канале, но, глядя на API, я не могу понять, как добиться того, чего я хочу. Возможно ли это, и каков наилучший способ проверки клиентских запросов? Моя конфигурация WebSocket ниже:
<websocket:message-broker
application-destination-prefix="/app">
<websocket:stomp-endpoint path="/pushchannel"/>
<websocket:stomp-broker-relay relay-host="localhost"
relay-port="61613" prefix="/topic"
heartbeat-receive-interval="300000" heartbeat-send-interval="300000" />
<websocket:client-inbound-channel>
<websocket:interceptors>
<bean class="MyClientMessageInterceptor"/>
</websocket:interceptors>
</websocket:client-inbound-channel>
</websocket:message-broker>
Это хорошая идея, однако 1) как вы используете SimpMessagingTemplate для отправки кадра STORP ERROR? и 2) как вы разорвать/закрыть websocket? – Nenad
@Nenad обновил ответ, попробуйте вторую часть и сообщите мне, если это сработает. – Karthik
@ Kathrik, если я сделаю исключение, чем я бы отказался от контроля потока и не смог бы отключиться. Вы знаете, есть ли способ отправки кадра ERROR без исключения исключения? – Nenad