首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Websockets时无法在中获取会话

使用Websockets时无法在中获取会话
EN

Stack Overflow用户
提问于 2014-09-15 06:27:45
回答 2查看 7.9K关注 0票数 5

我正在使用Websockets框架中的SockJS。我尝试了股票测试的例子,这是很好的工作,但现在我想在我的控制器会话,但我无法找到出路。

代码语言:javascript
复制
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.
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-17 16:10:48

如果您引用的是WebSocket会话,那么Spring4.1允许您在传入客户端消息的头中获取会话属性,这些消息可以通过SimpMessageHeaderAccessor访问。

代码语言:javascript
复制
@MessageMapping("/topic/agent-sendstatus")
public void testmethod(SimpMessageHeaderAccessor headerAccessor) {
    String sessionId = headerAccessor.getSessionId(); // Session ID
    Map<String, Object> attrs = headerAccessor.getSessionAttributes(); // Session Attributes
    ...
}
票数 7
EN

Stack Overflow用户

发布于 2015-05-20 15:08:53

我也认为你需要一个拦截器,没有它你会得到空的sessionAttributes

您需要在HttpSessionHandshakeInterceptor中添加dispatcher-servlet.xml

代码语言:javascript
复制
<websocket:message-broker
    application-destination-prefix="/app"
    user-destination-prefix="/user">
    <websocket:stomp-endpoint path="/websocket">
        <websocket:handshake-interceptors>
            <bean class="org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor"/>
        </websocket:handshake-interceptors>
        <websocket:sockjs session-cookie-needed="true" />
    </websocket:stomp-endpoint>
    <websocket:simple-broker prefix="/topic, /message" />
</websocket:message-broker>

然后您就可以在控制器中获得会话:

代码语言:javascript
复制
@MessageMapping("/authorization.action")
public Message authorizationAction(
        SimpMessageHeaderAccessor headerAccessor, Message message) {
    Map<String, Object> sessionAttributes = headerAccessor.getSessionAttributes();
    System.out.println(sessionAttributes);
    // Do something with session
    return new Message(...);
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25842009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档