5

Spring MVC Framework で Websockets SockJS を使用しています。正常に動作している Stock Ticker の例を試しましたが、コントローラーでセッションを取得したいのですが、方法が見つかりません。

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.
4

2 に答える 2

3

また、インターセプターが必要だと思います。インターセプターがないと空sessionAttributesになります。

HttpSessionHandshakeInterceptor以下を追加する必要がありますdispatcher-servlet.xml

<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>

そして、コントローラーでセッションを取得できるようになります。

@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(...);
}
于 2015-05-20T15:08:53.117 に答える