使用Websockets时无法在Spring Controller中获取ServletContext

时间:2014-09-25 05:43:08

标签: websocket sockjs spring-websocket servletcontextlistener

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("/agent-sendstatus")
        public void testmethod()
        {
            //How do i get ServletContext here to further implement solution?
            template.convertAndSend("/topic/agent-sendstatus","bcd");
        }

请建议。 我在控制器中使用SimpMessageHeaderAccessor获取会话,但我也需要ServletContext。 春天有什么办法吗?

1 个答案:

答案 0 :(得分:1)

当您升级到WebSocket时,通信中没有涉及HTTP,您在握手期间唯一拥有HTTP的地方。您可以实现HandshakeInterceptor来获取ServletContext并将任何参数公开给WebSocket会话,因此您可以使用HeaderAccessor在消息处理程序方法中获取它们。查看HttpSessionHandshakeInterceptor以获取示例。