java - 如何在 Spring WebSocketStompClient 中获取 Session Id?

标签 java spring session stomp spring-websocket

如何在 Java Spring WebSocketStompClient 中获取 session ID?

我有 WebSocketStompClient 和 StompSessionHandlerAdapter,它们可以很好地连接到我服务器上的 websocket。 WebSocketStompClient 使用 SockJsClient。
但我不知道如何获取 websocket 连接的 session ID。在客户端带有 stomp session 处理程序的代码中

   private class ProducerStompSessionHandler extends StompSessionHandlerAdapter {
            ...
            @Override
            public void afterConnected(StompSession session, StompHeaders  connectedHeaders) {
            ...
            }

stomp session 包含session id,与服务器上的session id不同。 所以从这个 ids 开始:

DEBUG ... Processing SockJS open frame in WebSocketClientSockJsSession[id='d6aaeacf90b84278b358528e7d96454a...

DEBUG ... DefaultStompSession - Connection established in session id=42e95c88-cbc9-642d-2ff9-e5c98fb85754

我需要来自 WebSocketClientSockJsSession 的第一个 session ID。 但是我没有在 WebSocketStompClient 或 SockJsClient 中找到任何方法来检索诸如 session ID 之类的东西......

最佳答案

可以使用@Header注解来访问sessionId:

@MessageMapping("/login")
public void login(@Header("simpSessionId") String sessionId) {
    System.out.println(sessionId);
}

在没有任何自定义拦截器的情况下它对我来说工作正常

关于java - 如何在 Spring WebSocketStompClient 中获取 Session Id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42243543/

相关文章:

php - Yii2:用户更改密码后从所有浏览器注销

java - 每次更改时保留整个 JPA 实体

java - 在java中解析控制台的输入表达式

java - 使用 spring mvc 下载的 Xlsx 文件已损坏且内容类型已更改

spring - Spring WebFlux 支持 OAuth2 授权服务器吗?

php - 似乎无法定义 session 数据并回显它

java - 在没有 '+' 运算符的情况下替换字符串中的变量

java - 不可调整大小的窗口边框和定位

java - Gradle在编译时包含jar,但排除运行时

session - Opencart 3.0.2.0 中无法触发事件(post.customer.login 和 post.customer.logout)