У меня есть приложение WebSocket, настроенное через Spring-Messaging.
Чтобы отличить отправителей, я извлекаю sessionId из метода контроллера. Но полученный идентификатор сеанса не совпадает с тем, что присутствует в файле cookie браузера jsessionid
.
Кроме того, я получаю правильный идентификатор сеанса в случае обычных контроллеров (@RequestMapping
).
@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
.
Но какой идентификатор сеанса я получаю с кодом, указанным выше? Это внутренний сеанс, созданный для каждого соединения WebSocket, или что-то другое?