首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确实现websocket会话的安全性?

如何正确实现websocket会话的安全性?
EN

Stack Overflow用户
提问于 2020-03-13 10:23:23
回答 1查看 60关注 0票数 0

我想使用websockets实现一种异步机制。我的想法是:

  1. 客户端执行REST调用。
  2. 服务器返回"subscribingID“并启动后台进程。
  3. 客户端在此主题上注册为订阅服务器(假设12232442是id): this.stompClient.subscribe('/callback/12232442',(messageOutput) => {让JSON.parse(messageOutput.body);console.log(messageOutput.body);};
  4. 一旦完成,服务器只需发送消息并关闭连接: StompSession.send(“回调/12232442”,新的MessageOutput());

它应该可以工作,但这里有一个问题:如何确保另一个客户端不能简单地订阅一个存在但不属于它们的ID?

此外,是否有任何内置机制来实现这一目标?

EN

回答 1

Stack Overflow用户

发布于 2020-04-15 12:17:41

  1. 当服务器收到订阅ID的REST请求时,可以将新生成的ID存储在订阅HashMap中。
  2. 为了在新订阅请求出现时进行处理,您可以实现自定义StompEventHandler,如下所示
代码语言:javascript
复制
@Controller
public class StompEventHandler{
@EventListener
public void handleSubscription(SessionSubscribeEvent event) {
    //Get incoming sessionDetails from event.
    //get the destination.
    // Validate that the destination is present in Subscription HashMap
    // and also that no client maps to the topic id.
    // Based on the result either send the message or send Unauth message to 
       client.

  }
}

文档

  1. 请注意,您还必须存储有关客户端会话ID的详细信息。与其向/topic/callback/<your_id>广播消息,还需要将消息发送到目的地,比如:/user/queue/callback/<your_id>。要发送到目的地,您需要使用simpMessagingTemplate.convertAndSendToUser(username, destination, payload, Headers) 读得好
  2. 因此,由于您只向特定用户的特定会话发送消息,所以您的消息是保密的。
  3. 如果您希望确保您甚至没有来自客户端的订阅,则可以向StompEventHandler类中的客户端发送一条StompEventHandler消息。这将强制取消订阅客户端。读得好
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60668695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档