首页 > 解决方案 > Spring Websockets:如何验证消息和接收客户端?

问题描述

我已经配置并工作了 Spring WebSockets。客户订阅一个特定的主题(例如/topic/contract/contract_id),只要有关于该合同/主题的消息,他们就会收到它。

问题是发送到这个主题的某些类型的消息是敏感的,应该只被一些客户端接收,而不是其他客户端。因此,我需要分析发送时正在发送的消息,订阅接收它的客户端,并让它通过某些客户端而不是其他客户端。有没有办法在 Spring WebSockets 中做到这一点?

标签: javaspringwebsocketspring-websocket

解决方案


听起来您正在使用 Pub/Sub 模式。我不是 Spring Web Sockets 方面的专家,但这听起来像是在更高抽象而不是数据传输级别上的两难境地。

你可以做两件事:

  • 要么一开始就不允许特定的客户端订阅频道,但听起来有些消息是通过发送的,有些则不是。因此,我推荐第二种选择:
  • 维护公共(类似群组)和私人频道。

在第一种情况下,只需拦截订阅期间调用的端点或服务,并抛出安全异常或以某种方式通信不允许加入。

在第二种情况下,频道名称有一个唯一的强ID,只有相关人员知道,他们可以收听私人消息。

我有第二个案例的经验,它运行良好,虽然我们没有关键信息,因为它是游戏的一部分,所以只有一个玩家可以收到该消息,而不是整个团队。


推荐阅读