session - 使用 Websockets 时无法在 Spring Controller 中获取 Session

标签 session sockjs spring-websocket

我正在将 Websockets SockJS 与 Spring MVC 框架一起使用。我尝试了工作正常的股票行情代码示例,但现在我想在我的 Controller 中获取 session ,但我找不到出路。

Client Code:
$scope.socket = new SockJS("ws/ws"); 
$scope.stompClient = Stomp.over($scope.socket); 
$scope.stompClient.connect("guest", "guest",connectCallback, errorCallback);

//in connectCallback
$scope.stompClient.subscribe('/topic/agent-sendstatus', showScreenPop);

    Java Code:
    @MessageMapping("/topic/agent-sendstatus")
        public void testmethod()
        {
            //How do i get Session here to further implement solution?

            template.convertAndSend("/topic/agent-sendstatus","bcd");
        }

Please suggest.

最佳答案

如果您指的是 WebSocket session ,Spring 4.1 允许您在传入客户端消息的 header 中获取 session 属性,这些属性可以通过 SimpMessageHeaderAccessor 访问。

@MessageMapping("/topic/agent-sendstatus")
public void testmethod(SimpMessageHeaderAccessor headerAccessor) {
    String sessionId = headerAccessor.getSessionId(); // Session ID
    Map<String, Object> attrs = headerAccessor.getSessionAttributes(); // Session Attributes
    ...
}

关于session - 使用 Websockets 时无法在 Spring Controller 中获取 Session,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25842009/

相关文章:

c# - 如何在 MVC 4 应用程序中进行单用户登录

java - Spring WebSocket @SendToSession : send message to specific session

java - 使用 Sockjs 和 Stompjs 的 Spring MVC 和 Websocket 异常

javascript - 在 Javascript 中访问 PHP session 名称

c# - 如何使用 C# 上传文件并将其保存到流中以供进一步预览?

java - 如何只向一个用户发送 websocket 消息?

java - RabbitMQ 的 Servlet 端点

javax.servlet.ServletException : Not running on Jetty, JSR-356 支持不可用

php - 在不同的 php 文件之间使用 SESSIONS 变量

spring - websocket客户端连接到服务器时的SockJsException