我正在使用Websockets框架中的SockJS。我尝试了股票测试的例子,这是很好的工作,但现在我想在我的控制器会话,但我无法找到出路。
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.发布于 2014-09-17 16:10:48
如果您引用的是WebSocket会话,那么Spring4.1允许您在传入客户端消息的头中获取会话属性,这些消息可以通过SimpMessageHeaderAccessor访问。
@MessageMapping("/topic/agent-sendstatus")
public void testmethod(SimpMessageHeaderAccessor headerAccessor) {
String sessionId = headerAccessor.getSessionId(); // Session ID
Map<String, Object> attrs = headerAccessor.getSessionAttributes(); // Session Attributes
...
}发布于 2015-05-20 15:08:53
我也认为你需要一个拦截器,没有它你会得到空的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(...);
}https://stackoverflow.com/questions/25842009
复制相似问题