захватить идентификатор сессии в весеннем websocket - PullRequest
0 голосов
/ 16 сентября 2018

Мой WebSocketConfig класс

@EnableWebSocket
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker( MessageBrokerRegistry registry )
    {
        registry.enableSimpleBroker("/topic", "/queue");
        registry.setApplicationDestinationPrefixes("/user");
        registry.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints( StompEndpointRegistry stompEndpointRegistry )
    {
        stompEndpointRegistry.addEndpoint("/ws").withSockJS();
        stompEndpointRegistry.addEndpoint("/ws");
    }

}

Как получить идентификатор сеанса WebSocket при установлении соединения?

1 Ответ

0 голосов
/ 17 сентября 2018

Когда сеанс STOMP подключен, выполняется этот фрагмент кода:

 else if (StompCommand.CONNECTED.equals(command)) {
        this.stats.incrementConnectedCount();
        accessor = afterStompSessionConnected(message, accessor, session);
        if (this.eventPublisher != null && StompCommand.CONNECTED.equals(command)) {
            try {
                SimpAttributes simpAttributes = new SimpAttributes(session.getId(), session.getAttributes());
                SimpAttributesContextHolder.setAttributes(simpAttributes);
                Principal user = getUser(session);
                publishEvent(this.eventPublisher, new SessionConnectedEvent(this, (Message<byte[]>) message, user));
            }
            finally {
                SimpAttributesContextHolder.resetAttributes();
            }
        }
    }

Обратите внимание на SessionConnectedEvent для прослушивания с @EventListener, а также на SimpAttributesContextHolder. Вы можете получить доступ к sessionId в этом прослушивателе событий, используя статический API из SimpAttributesContextHolder.

С другой стороны, упомянутое сообщение в событии имеет специальный заголовок simpSessionId для вашего рассмотрения.

...