gpt4 book ai didi

websocket - Vertx SockJs 事件总线身份验证

转载 作者:行者123 更新时间:2023-12-05 09:18:27 27 4
gpt4 key购买 nike

我正在尝试建立从前端到 vertx 后端的 sock.js 连接。

我最初的尝试是这样的:

let token = '<the token>';
let data = {'Authorization' : 'Bearer ' + token};
let eb = new EventBus("http://localhost:8080/eventbus");
eb.onopen = function () {
eb.registerHandler('notifications', data, (err, msg) => {
// handle the response
});
}

这不起作用,因为我需要在创建 EventBus 时发送授权数据,即使官方 sock.js 文档声明这不受支持。显然现在发送 new EventBus("http://localhost:9090/eventbus", data) 也不起作用。

https://github.com/sockjs/sockjs-node#authorisation

我的后端处理程序:

final BridgeOptions bridgeOptions = new BridgeOptions()
.addOutboundPermitted(new PermittedOptions().setAddress("notifications"))

final SockJSHandler sockJSHandler = SockJSHandler.create(vertx).bridge(bridgeOptions, event -> {
event.complete(true);
});

router.route("/eventbus/*").handler(ctx -> {
String token = ctx.request().getHeader("Authorization"); // null
});
router.route("/eventbus/*").handler(sockJSHandler);

无论我尝试什么, header 字段 Authroization 始终为 null。

验证 sock.js 连接并注册到 vertx 中的事件总线请求的标准方法是什么?

最佳答案

SockJS 默认使用 WebSockets。您不能使用 JavaScript WebSocket API 添加自定义 header (授权等)。阅读此 thread以获得更多解释。

我看到两种方式,如何添加授权:

  1. 只需在 URL 中添加 token 参数即可:

    let eb = new EventBus("http://localhost:8080/eventbus?token=" + token);

    下面是如何在服务器上获取它:

    String token = ctx.request().getParam("token");
  2. 连接到服务器后发送授权消息。它可以是一些 JSON 对象,其中包含 token 字段。

我认为,第一个选项就足够了,但是,就事件总线和 SockJS 而言,第二个选项可能更难实现。

关于websocket - Vertx SockJs 事件总线身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44386942/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com