Я пытаюсь реализовать простое приложение веб-сокетов, которое может отправлять сообщения из одной конечной точки в указанный сеанс, установленный в другом месте. До сих пор мне удавалось использовать аннотацию @SendToUser(), чтобы клиент мог подписаться на канал (как обсуждалось в этом вопросе: Spring Websockets @SendToUser без входа в систему?)
Однако теперь я хочу создать отдельную конечную точку, которая при вызове ищет пользователя, связанного с данными, переданными в эту конечную точку, и отправляет этому пользователю сообщение об этих данных.
Однако я не смог точно определить, как сделать так, чтобы я мог вызывать команду SimpMessagingTemplate convertAndSendToUser(), потому что у моих пользователей нет принципала (я не использую Spring Security).
Мне удалось получить simpSessionId из MessageHeaders, переданных в конечную точку @MessageMapping, но теперь я не могу понять, как использовать simpSessionId для отправки информации из разных частей моего приложения.
Я провел некоторое исследование относительно переопределения метода defineUser() DefaultHandshakeHandler и назначения случайно сгенерированного UUID в качестве имени пользователя пользователю после успешного рукопожатия через веб-сокет (как описано в ответе на этот вопрос: Как ответить неаутентифицированному пользователю в Spring 4 STOMP через конфигурацию WebSocket?), но, поскольку появляющийся принципал имеет значение null, я не совсем уверен, как правильно сгенерировать его и назначить Принципалу для использования с приложением.
В основном мне нужна возможность иметь анонимных пользователей и отправлять им сообщения из разных частей приложения после того, как они создали соединение через веб-сокет.