关键词:
【中文标题】处理 STOMP SEND 时在 Spring 中获取 Websocket 会话数据【英文标题】:Get Websocket session data in Spring when handing STOMP SEND 【发布时间】:2016-12-22 15:36:45 【问题描述】:Spring Websocket 教程告诉我,如果我喜欢处理 STOMP SEND 命令,我将使用 (http://docs.spring.io/spring/docs/current/spring-framework-reference/html/websocket.html)
@Controller
public class GreetingController
@MessageMapping("/greeting")
public String handle(String greeting)
return "[" + getTimestamp() + ": " + greeting;
但我还需要知道哪个 Websocket Session 发送了这个,以便进行检查
if (sessionIsAllowedToDoThings(sessionData)) ...
因此,我如何获取此示例的 Websocket 会话数据?
【问题讨论】:
【参考方案1】:好吧,您可以通过在您的handle(String)
方法中添加org.springframework.messaging.simp.stomp.StompHeaderAccessor
参数来获取websocket 的会话ID(和其他字段):handle(String, StompHeaderAccessor)
。
如果你想访问你真正的JSESSIONID
属性,你必须像这样创建org.springframework.web.socket.server.HandshakeInterceptor
的实现(它是用Kotlin 编写的):
class HttpHandshakeInterceptor : HandshakeInterceptor
companion object
const val ATTRIBUTE_SESSION_ID = "sessionId"
override fun beforeHandshake(request: ServerHttpRequest, response: ServerHttpResponse, wsHandler: WebSocketHandler, attributes: MutableMap<String, Any>): Boolean
attributes[ATTRIBUTE_SESSION_ID] = (request as ServletServerHttpRequest).servletRequest.session.id
return true
override fun afterHandshake(request: ServerHttpRequest, response: ServerHttpResponse, wsHandler: WebSocketHandler, exception: Exception?)
并在您的org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer
中注册,如下所示:
override fun registerStompEndpoints(registry: StompEndpointRegistry)
registry.addEndpoint("/endpoint").addInterceptors(httpHandshakeInterceptor)
这里的主要思想是您拦截初始握手并将真实会话 ID 存储在 websocket 属性中。这些属性可通过您传递给handle(String, StompHeaderAccessor)
方法的StompHeaderAccessor
获得。
【讨论】:
谢谢,我不知道如何使用 StompHeaderAccessor,但我已将@Headers Map<String, Object> headers
参数添加到使用 @MessageMapping
注释的方法中,看起来它正在工作。 HandshakeInterceptor 中设置的属性存储在simpSessionAttributes
键下的嵌套映射中。
很高兴知道 :) 谢谢。Spring 4 - websocket 消息传递 stomp 处理程序
】Spring4-websocket消息传递stomp处理程序【英文标题】:Spring4-websocketmessagingstomphandler【发布时间】:2014-03-0607:17:54【问题描述】:我正在尝试spring提供的教程-messaging-stomp-websocket并且效果很好现在我想扩展this并添加拦截通道的WebSoc... 查看详情
使用同步时在 Spring 分区中出现意外
...5:47【问题描述】:我正在使用SpringBatch和Partition进行并行处理。用于db的Hibernate和SpringDataJpa。对于分区步骤,读取器、处理器和写入器具有步进范围,因此我可以向它们注入分区键和范围(从到)。现在在处理 查看详情
springboot/spring中建立websocket连接(stomp)(代码片段)
...CT断开STOMPOverWebSocket:http://jmesnil.net/stomp-websocket/doc/1,SpringBoot添加基于STMOP协议的WebSocket支持1.1,添加pom依赖<dependency><groupId>org.springframework.boot&l 查看详情
使用 STOMP/WebSockets/Spring 从 @SubscribeMapping 返回原始字符串
...我有一个使用STOMPoverwebsockets的Spring-MVC控制器。除了订阅时在我的STOMPJavaScript客户端 查看详情
如何使用spring-boot处理越来越多的stomp主题
...时间然后被遗忘,其他人来了。我无法找到有关Spring如何处理创建主题的信息,更具体地说:是否可以创建最大数量或主题?动态创建的主题会发生什么,没有更多订阅者, 查看详情
使用同步时在 Spring 分区中出现意外
...0:34【问题描述】:我正在使用SpringBatch和Partition进行并行处理。用于db的Hibernate和SpringDataJpa。对于分区步骤,读取器、处理器和写入器具有stepscope,因此我可以向它们注入分区键和范围(从到)。 查看详情
在 Spring 中访问 Stomp 标头
】在Spring中访问Stomp标头【英文标题】:AccessingStompHeadersinSpring【发布时间】:2017-01-2410:39:17【问题描述】:我想在stomp标头中设置一个用户名,并在握手期间将该用户名设置在Principal对象中。创建了我自己的HandshakeHandler,但我... 查看详情
Spring Websocket STOMP 负载测试
.../压力测试。但是,我们想知道SpringWebsocket/STOMP端点可以处理多少消息 查看详情
在一个请求中从 JS 到 Spring 的多个 STOMP 订阅
】在一个请求中从JS到Spring的多个STOMP订阅【英文标题】:MultipleSTOMPsubscriptionsfromJStoSpringinonerequest【发布时间】:2019-07-1506:21:30【问题描述】:目标是使用Web界面和Spring框架进行多房间聊天。看起来STOMP超过SockJS是此类项目的最... 查看详情
springboot/spring中建立websocket连接(stomp)(代码片段)
STOMP协议介绍STOMP,StreamingTextOrientatedMessageProtocol,是流文本定向消息协议,是一种为MOM(MessageOrientedMiddleware,面向消息的中间件)设计的简单文本协议。它提供了一个可互操作的连接格式,允许STOMP客户端与任意... 查看详情
使用 Stomp 在 Spring Boot 中访问 JWT 令牌
】使用Stomp在SpringBoot中访问JWT令牌【英文标题】:AccessJWTtokeninSpringBootwithStomp【发布时间】:2022-01-1416:31:49【问题描述】:我已经按照thisguide设置了ng2-stompjs,但是在我的Spring引导后端遇到问题,因为我使用的是JWT令牌。首先,... 查看详情
没有 SockJS/StompJS 的 Spring STOMP 服务器
...有支持SpringWebsocket的Spring服务器。我想使用STOMP子协议来处理web套接字上的通信,所以STOMP端点的配置如下:@Configuration@EnableWebSocketMessageBro 查看详情
使用 Stomp PHP 库连接到 Spring websockets (stomp)
】使用StompPHP库连接到Springwebsockets(stomp)【英文标题】:ConnectwithaStompPHPlibrarytoSpringwebsockets(stomp)【发布时间】:2014-08-0815:12:24【问题描述】:我已经编译并运行了本指南中的代码:http://spring.io/guides/gs/messaging-stomp-websocket/我想使... 查看详情
我正在使用 websocket 在与 Spring Boot 和 STOMP 客户端与 js 聊天中发送图像
】我正在使用websocket在与SpringBoot和STOMP客户端与js聊天中发送图像【英文标题】:IamusingwebsockettosendimagesinachatwithspringbootandSTOMPclientwithjs【发布时间】:2021-06-2808:07:53【问题描述】:大家好,我正在使用websocket使用stomp客户端发送... 查看详情
如何在 Spring Boot 应用程序中向 STOMP CREATED 消息添加自定义标头?
】如何在SpringBoot应用程序中向STOMPCREATED消息添加自定义标头?【英文标题】:HowtoaddcustomheaderstoSTOMPCREATEDmessageinSpringBootapplication?【发布时间】:2017-06-2905:16:55【问题描述】:我正在尝试将自定义标头添加到客户端在第一次连接... 查看详情
Spring Stomp 可以发送未经请求的消息
】SpringStomp可以发送未经请求的消息【英文标题】:SpringStompCANsendunsolicitedmessages【发布时间】:2016-01-2117:43:26【问题描述】:在SpringWebSocket文档中我发现了这句话:重要的是要知道服务器不能发送未经请求的消息。http://docs.spring... 查看详情
Spring Web 套接字和 Stomp 的日志中的“会话 id 没有解码器”
】SpringWeb套接字和Stomp的日志中的“会话id没有解码器”【英文标题】:"Nodecoderforsessionid"inlogsforSpringwebsocketsandStomp【发布时间】:2017-10-0610:45:34【问题描述】:我在一台服务器上有一个带有2个实例和apache代理的tomcat集群... 查看详情
Spring 4 websocket + stomp + rabbitmq 和集群
】Spring4websocket+stomp+rabbitmq和集群【英文标题】:Spring4websocket+stomp+rabbitmqandclustering【发布时间】:2016-02-1605:39:01【问题描述】:我正在经历Spring4websocket+stomp+rabbitmq(RabbitMQ-Web-Stomp插件)架构,我有一个关于集群的问题。根据我的理... 查看详情