java - 使用SimpleBrokerMessageHandler时的通信关系 - STOMP Spring

标签 java spring websocket stomp

似乎找不到这个问题的答案,并且没有足够的关于 SimpleBrokerMessageHandler 的文档.

我按照这个例子:https://gerrydevstory.com/2014/03/04/stock-ticker-demo-webapp-using-spring-4-websocket/

似乎如果客户端主题发送消息,订阅该主题的所有其他客户端都会收到该消息。就好像主题的默认关系是多对多

我希望这种关系是一对多,这意味着一台服务器对多个客户端,而不是多个客户端对多个客户端和服务器。

此行为表明存在安全/真实性问题 - 按照上面链接中的示例,客户端可以向其他人发送虚假股票价格,冒充服务器。

我还希望,如果这是这种行为,那么它可能会在 Spring Websockets 和 stomp 配置中的某个地方被覆盖或更改,但我在任何地方都找不到足够的信息。

所以问题是:

  1. SimpleBrokerMessageHandler 的默认行为真的是多对多吗?
  2. 我是否没有正确理解topic的含义?
  3. 这种行为可以通过某种方式改变或控制吗?
  4. 如果没有,ActiveMQ 或 RabbitMQ 或任何其他第三方代理是否可以满足我的需求(实现一对多方案)?怎么办?

最佳答案

带有 /topic 前缀的目的地通常是代理目的地,正如您所说,任何人都可以向此类目的地发送消息,并且所有订阅者都会收到这些消息(消息实际上转发给代理)简单代理和代理中继(使用任何成熟的 STOMP 代理,如 RabbitMQ 或 ActiveMQ)都会发生这种情况。

但是,Spring Security 4 (目前在 M2 中),添加了 websocket 安全支持,以便您可以限制发送消息或订阅目的地(请参阅 JIRA SEC-2713 )。如果这还不够,您可以实现自己的 ChannelInterceptor 并将其添加到 clientInboundChannel 中,以便您可以根据您的逻辑处理消息并丢弃它。

关于java - 使用SimpleBrokerMessageHandler时的通信关系 - STOMP Spring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27275969/

相关文章:

java - 如何在重启之间保持 intellij idea 索引?

java - Google Eclipse 插件关于测试依赖项的警告

java - for循环内while循环的时间复杂度

java - 使用 maven 安装 microsoft sqljdbc 驱动程序

iOS webbrowser会自动关闭websocket连接吗?

node.js - NodeJS WebSocket 握手静默失败?

java - 从 Swagger 中删除额外的参数

java - 带有 setter 注入(inject)的 Spring @Qualifier 奇怪行为

java - 前端 (HTML) 未从 Microsoft Azure 中的 mysql 数据库获取 Spring Boot 应用程序中的数据

sockets - socket.io动态发送和接收消息