Когда сервер получает запрос REST для идентификатора подписки, вы можете сохранить вновь созданный идентификатор в HashMap подписки.
Для выполнения обработки когда приходит новый запрос на подписку, вы можете реализовать пользовательский StompEventHandler
, например
@Controller
public class StompEventHandler{
@EventListener
public void handleSubscription(SessionSubscribeEvent event) {
//Get incoming sessionDetails from event.
//get the destination.
// Validate that the destination is present in Subscription HashMap
// and also that no client maps to the topic id.
// Based on the result either send the message or send Unauth message to
client.
}
}
Документация
Обратите внимание, что для этого вам также необходимо хранить сведения об идентификаторе сеанса клиента. Вместо того, чтобы передавать сообщение на /topic/callback/<your_id>
, вам необходимо отправить сообщение в пункт назначения следующим образом: /user/queue/callback/<your_id>
. Для отправки в пункт назначения как таковой вам необходимо использовать simpMessagingTemplate.convertAndSendToUser(username, destination, payload, Headers)
Good Read для этого
Так как вы отправляете сообщения только на определенный сеанс конкретный пользователь, ваши сообщения являются конфиденциальными.
Если вы хотите убедиться, что у вас даже нет подписки от клиента, вы можете отправить клиенту сообщение UNSUBSCRIBE
в классе StompEventHandler
. Это заставит клиента отказаться от подписки. Хорошо читать для этого