问题标签 [spring-websocket]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
spring - How to get/set the principal and session attributes from Spring 4 stomp websocket methods
I'm doing experiments with Spring 4 websockets and stomp, and I have a hard time figuring out how to get/set the current user and other session attributes in a message handling method annotated with @MessageMapping
.
The documentation says that the message handling methods can take a Principal as argument, and I found that the principal is retrieved by Spring by calling getUserPrincipal()
on the native socket session, and then associated with the socket session, but I haven't found any way to easily customize this behavior, other than writing a servlet filter and wrap the original request into a wrapper returning the principal found in my cookie.
So my questions are:
- How to manually set the principal to the socket session, when the client connects (I have this information thanks to a custom cookie, and I don't use Spring security)?
- If 1 is not possible, how to add additional attributes to the socket session when the client connects?
- How to access the socket session and its attributes from a message handling method?
- Is there a way to access the login and passcode sent by the browser at connection time. They seem to be completely ignore by Spring and not accessible.
rabbitmq - 使用 Spring 4.0 webstocket stomp api 连接到 Rabbitmq 失败
我尝试使用 Spring 4.0 WebSocketMessageBrokerConfigurer 类与 RabbitMQ 建立 STOMP 连接,但失败了?
代码快照在这里。
注意
- 我正在使用 spring boot 来运行应用程序。事实上,我正在更改现有的 spring 示例“ gs-messaging-stomp-websocket ”。并更改类WebSocketConfig。
- Rabbitmq 在本地安装并启用了 STOMP 插件。
- 添加了所有 maven 依赖项,例如 spring-rabbitmq。
我还需要做其他事情吗?
谢谢,拉菲克
spring - 如何通过 WebSocket 配置回复 Spring 4 STOMP 中未经身份验证的用户?
我正在试验 Spring 4 WebSocket STOMP 应用程序。有没有办法在每个用户都有唯一的会话 ID 的情况下回复单个未经身份验证的用户?现在我只能广播消息或直接将其发送给经过身份验证的用户。
spring-4 - 使用 Spring 4 Websockets 声明和使用 RabbitMQ
在我们当前的应用程序中,我们以这种方式使用 Spring AMQP:
当我在基于 Spring 4 的新应用程序中配置 websocket 时,我不知道如何/在哪里声明交换、队列等......
这东西必须用 AMPQ 来实现吗?
spring - 如何在 Spring Messaging 中指定处理程序生成的内容类型?
我正在试验 Spring 4 WebSocket STOMP 应用程序。有没有办法明确指定处理程序产生的返回消息的内容类型?默认情况下,下面的处理application/json
程序由相应的消息转换器生成和处理。
我正在寻找类似@RequestMapping(produces = "text/xml")
Spring MVC 的东西。
更新(回复罗森的回答):
理想情况下,我希望能够根据用户的要求返回两种格式。但如果我必须选择,我会说 XML 而几乎从不说 JSON(XML 只是一个例子,我们使用二进制格式)。我采用了您建议的第二种方式 - 配置自定义转换器而不是默认转换器。
- 我已经实现了自定义
MessageConverter
扩展AbstractMessageConverter
。在构造函数中,我注册了适当的受支持的 MimeType。 - 然后我通过覆盖
WebSocketMessageBrokerConfigurer
's注册了我的自定义转换器configureMessageConverters
,并false
从该方法返回以不添加默认转换器。 - 一旦我的控制器返回值,我就会在
SendToMethodReturnValueHandler
's中获得 NPEpostProcessMessage
。发生这种情况是因为CompositeMessageConverter
仅包含一个转换器 - 我的自定义转换器。但我的转换器未能AbstractMessageConverter
通过supportsMimeType
检查并返回。这会导致.AbstractMessageConverter
toMessage
null
null
postProcessMessage
作为解决方法,我可以application/json
为我的自定义转换器注册额外的默认 MimeType。但它看起来对我来说太脏了。
java - 使用 Spring websockets 自定义 Stomp 标头
我有一个基本的 spring websocket 应用程序,它当前向订阅者发送基本数据。目前系统使用SimpMessageSendingOperations
该类作为消息处理程序。如果我打电话SimpMessageSendingOperations.convertAndSend(destination, object)
,那么对象将被订阅的客户转换并接收。
我希望能够向客户发送自定义标头。我已经尝试使用该SimpMessageSendingOperations.convertAndSend(destination, object, headers)
方法来做到这一点。但是,自定义标头不包含在 stomp 消息中。
通过代码进行调试,它看起来像是使用本机标头和原始本机标头映射来构建单块标头的StompHeaderAccessor.toStompHeaderMap()
方法调用
。toNativeHeaderMap()
有没有办法将自定义标头添加到 stomp 消息中?
java - Spring websocket 示例 - 错误 - 您是否在支持 J SR-356 的 Servlet 容器中运行?
我正在尝试运行给定 @ https://spring.io/guides/gs/messaging-stomp-websocket的 Spring 4 示例。当我尝试连接到套接字时,它会引发以下异常。根据示例,您需要 tomcat 7.0.50,并且我检查了具有正确版本 tomcat 的可执行 jar。任何指针都会有所帮助。
spring - 如何使用 Spring-websocket 拒绝基于用户权限的主题订阅
我正在实现一个版本的股票应用程序,其中服务器能够根据用户权限拒绝某个主题的主题订阅。spring-websocket 中有没有办法做到这一点?
例如:
在股票示例项目中,我们有 3 个工具的价格主题:Apple、Microsoft、Google 并且有两个用户:User1、User2
User1 应该可以访问 Apple,而 Microsoft User2 应该只能访问 Google
如果 User1 订阅了谷歌,他应该得到拒绝的响应,并且消息不应该在之后广播给他。
spring - 为spring sockjs websocket服务器设置消息大小
我已经为 websockets 使用了 spring sockjs 服务器实现。它支持最大 2kb 的消息,但高于该 websocket 连接中断 - 给出 1006 错误。如果我减小消息大小,那么它运行正常。我浏览了文档和课程,但可以找到一个可以增加此限制的地方。也曾在春季论坛问过,但没有回复。任何想法?
spring - 如何增加spring sockjs websocket服务器实现的输出缓冲区
我使用了 sockjs websocket 服务器的 spring 实现,无法传输超过 8KB 的消息,以下是错误
任何想法如何增加缓冲区大小
我使用了以下工厂,因为 spring sockjs 利用了 tomcat 容器(应用程序部署在 tomcat 中,我还进行了调试以确认它确实使用了 tomcat lib)
然后我的 URL 映射看起来
我需要在某个地方用 sockjs 设置这个 bean 吗?sockjs 怎么知道它必须使用这个工厂?