Spring Websockets:如何验证消息和接收客户端?

Posted

技术标签:

【中文标题】Spring Websockets:如何验证消息和接收客户端?【英文标题】:Spring Websockets: How to validate message and receive clients? 【发布时间】:2019-07-30 15:37:07 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

你可以做两件事:

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

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

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

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

【讨论】:

以上是关于Spring Websockets:如何验证消息和接收客户端?的主要内容,如果未能解决你的问题,请参考以下文章

Spring消息传递+安全如何通过websockets登录?

使用 Spring 5 的反应式 WebSockets - 如何获取初始消息

Spring websockets:消息未发布

Spring-Websockets 4.2 中使用 SockJS 的部分消息

阻塞消息挂起 10000 用于阻塞 ..使用 spring websockets

将 Spring websockets (sockJS + Stomp) 与基于令牌的身份验证 (JWT) 一起使用的最佳方法