我正在尝试实现一个简单的 websockets 应用程序,该应用程序可以将消息从一个端点发送到在其他地方建立的指定会话。到目前为止,我已经能够使用注释 @SendToUser() 以便客户端订阅频道(如本问题中所述:Spring Websockets @SendToUser without Login?)
但是,我现在想要创建一个单独的端点,当调用该端点时,它会查找与传递到该端点的数据关联的用户,并向该用户发送有关该数据的消息。
但是,我无法准确确定如何制作它,以便我可以调用 SimpMessagingTemplate ConvertAndSendToUser() 命令,因为我的用户没有主体(我没有使用 Spring Security)。
我已经能够从传递到 @MessageMapping 端点的 MessageHeaders 中获取 simpSessionId,但现在我无法弄清楚如何使用 simpSessionId 从应用程序的不同部分发送信息。
我已经做了一些研究,涉及重写 DefaultHandshakeHandler 的确定用户()方法,并在成功的 websocket 握手时将随机生成的 UUID 作为用户名分配给用户(如此问题的答案中所述:如何在 Spring 4 中回复未经身份验证的用户) STOMP over WebSocket 配置?),但由于出现的主体为 null,我不确定如何正确生成主体并将其分配给主体以供应用程序使用。
我基本上需要能够拥有匿名用户,并在他们创建 websocket 连接后从应用程序的不同部分向他们发送消息。