如何将 STOMP 与 Spring Security 结合使用

问题描述 投票:0回答:1
 let client = Stomp.client("ws://192.168.181.77:3001/ws");
    client.connect(
      {
        headers: {
          Authorization:
            "Bearer TOKEN",
        },
      },
      () => {
        console.log("client ok");
      },
      () => {
        console.log("client not ok");
      }
    );

我正在尝试使用 stompjs 库连接到 Stomp Broker。但我无法在那里发送 auth 标头,因为我收到 401 响应。如何通过连接请求发送我的令牌,因此我不会收到此 401 错误

我使用wireshark来调查问题,发现请求中不存在标头,尽管我将其设置为标头

spring-boot react-native spring-security jwt stomp
1个回答
0
投票

您在 stompClient#connect 中传递的标头将作为通过 websocket 发送的 CONNECT stomp 帧的标头传递,而不是作为请求标头传递。

根据 spring websocket 网站

但实际上,浏览器客户端只能使用标准身份验证标头(即基本 HTTP 身份验证)或 Cookie,而不能(例如)提供自定义标头。

也来自 Spring 站点的 WebSocket 简介

WebSocket 交互从 HTTP 请求开始,该请求使用 HTTP Upgrade 标头进行升级,或者在本例中切换到 WebSocket 协议。

为了允许初始 HTTP 协商发生,在 Spring SecurityFilter 配置中允许接收到 Websocket 目的地的所有请求,并使用 ChannelInterceptor 进行授权。 请参阅 https://stackoverflow.com/a/45405333 了解详细示例。

© www.soinside.com 2019 - 2024. All rights reserved.