似乎找不到这个问题的答案,也没有足够的关于SimpleBrokerMessageHandler的文档。
我按照这个例子:https://gerrydevstory.com/2014/03/04/stock-ticker-demo-webapp-using-spring-4-websocket/
似乎如果客户端向该主题发送消息,则订阅该主题的所有其他客户端都将收到该消息。好像主题的默认关系是many-to-many
.
我希望这种关系是one-to-many
的,这意味着一台服务器对许多客户端,而不是许多客户端到许多客户端和服务器。
此行为表明存在安全性/真实性问题 - 按照上面链接中的示例,客户端可能会向其他人发送虚假股票价格,冒充服务器。
我还希望,如果这是行为,那么它可以以某种方式在弹簧 websockets 和 tomp 的配置中的某个地方被覆盖或更改,但我只是在任何地方都找不到足够的信息。
所以问题是:
- 默认行为真的
many-to-many
SimpleBrokerMessageHandler 吗? - 我没有正确理解
topic
的含义吗? - 这种行为可以以某种方式改变或控制吗?
- 如果没有,ActiveMQ或RabbitMQ或任何其他第三方代理是否会对我的需求(实施
one-to-many
方案(有任何帮助?又如何?
带有/topic
前缀的目的地通常是代理目的地,正如您正确所说,任何人都可以向此类目的地发送消息,并且所有订阅者都将收到这些消息(消息实际上被转发给代理(。这在简单代理和代理中继中都会发生(使用任何成熟的 STOMP 代理,如 RabbitMQ 或 ActiveMQ(。
但是,Spring Security 4(目前在M2中(添加了websocket安全支持,因此您可以限制发送消息或订阅目的地(请参阅JIRA SEC-2713(。如果这还不够,您可以实现自己的ChannelInterceptor
并将其添加到clientInboundChannel
,以便您可以根据逻辑处理消息并丢弃它。