我目前正在使用将Websocket与stomp,sockjs,spring-mvc,spring-security一起使用的应用程序。

我面临的问题是,在我使用UI(javascript部分)中的stomp和sockjs进行了websocket调用后,我可能无法同时获得响应,即响应可以是异步的。现在,后端代码来自spring mvc的用户需要了解以下三个信息,以便将数据发送回UI到仅请求它的特定用户

  • 实际请求资源的用户的sessionid
  • 发送数据的用户
  • 目标网址。

下面的代码从任何类发送响应都需要以上3条信息。

simpMessagingTemplate.convertAndSendToUser("username", </queue/destination-url>, dataToSend, sesionId of the requesting user for constructing the header);

我已经尝试使用以下方法:

SecurityContextHolder.getContext().getAuthentication().getPrincipal()
RequestContextHolder.currentRequestAttributes().getSessionId()

但是这些都让我需要将数据发回给班级的NPE 因此,我想知道是否有一种方法可以使用spring-security获得这些信息,或者是否有其他方法可以实现这一点。

如果您需要其他任何信息,请告诉我。 感谢您的帮助。

===============>>#1 票数:0

您可以在事件监听器中捕获SessionConnectedEvent 我在这篇文章中解释了如何做

这是Spring Websocket文档的摘录:

SessionConnectEvent —在收到新的STOMP CONNECT时表示已开始新的客户端会话,然后发布。 该事件包含代表连接的消息,包括会话ID,用户信息(如果有)以及客户端可能已发送的任何自定义标头。 这对于跟踪客户端会话很有用。 预订此事件的组件可以使用SimpMessageHeaderAccessor或StompMessageHeaderAccessor包装包含的消息。

看来您将能够提取所需的所有信息并将其存储在某处。

  ask by Sushant translate from so

未解决问题?本站智能推荐: