似乎找不到这个问题的答案,并且没有足够的关于 SimpleBrokerMessageHandler 的文档.
我按照这个例子:https://gerrydevstory.com/2014/03/04/stock-ticker-demo-webapp-using-spring-4-websocket/
似乎如果客户端向主题发送消息,订阅该主题的所有其他客户端都会收到该消息。就好像主题的默认关系是多对多
。
我希望这种关系是一对多
,这意味着一台服务器对多个客户端,而不是多个客户端对多个客户端和服务器。
此行为表明存在安全/真实性问题 - 按照上面链接中的示例,客户端可以向其他人发送虚假股票价格,冒充服务器。
我还希望,如果这是这种行为,那么它可能会在 Spring Websockets 和 stomp 配置中的某个地方被覆盖或更改,但我在任何地方都找不到足够的信息。
所以问题是:
- SimpleBrokerMessageHandler 的默认行为真的是
多对多
吗? - 我是否没有正确理解
topic
的含义? - 这种行为可以通过某种方式改变或控制吗?
- 如果没有,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/