我有一个通过Spring消息配置的WebSocket应用程序。
为了区分发件人,我从控制器方法中提取sessionId。但是收到的会话ID与浏览器Cookie jsessionid
中的会话ID不匹配。
此外,如果使用常规控制器(@RequestMapping
),我可以获得正确的会话ID。
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ba-channel").withSockJS();
}
}
我的控制器:
@Controller
public class WebsocketController {
@MessageMapping("/hello")
public void greeting(Message message, SimpMessageHeaderAccessor headerAccessor) throws Exception {
System.out.println(headerAccessor.getSessionId());
}
}
此外,如果使用WebSockets,是否在每个帧中都不发送cookie? ?
更新:我可以通过附加HandshakeInterceptor
来获取正确的会话ID。
但是我使用上面提供的代码收到的会话ID是什么?是通过WebSocket连接创建的内部会话还是其他内容?