浏览器和Spring WebSocket控制器之间的会话ID不匹配

时间:2019-01-14 06:17:12

标签: java websocket sockjs spring-messaging

我有一个通过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连接创建的内部会话还是其他内容?

0 个答案:

没有答案