несоответствие идентификатора сеанса между браузером и весенним контроллером websocket - PullRequest
0 голосов
/ 14 января 2019

У меня есть приложение 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, или что-то другое?

...