【问题标题】:Spring Websocket not working with ssl (wss)Spring Websocket 不适用于 ssl (wss)
【发布时间】:2020-07-21 18:43:58
【问题描述】:

我有一个应用程序,在 Spring Cloud Gateway 后面的 Spring 后端和 Angular 前端之间有一个 websocket 连接,它可以通过 http / ws 完美运行,但根本不起作用。

我尝试了什么,什么有效:

  • 直接启动angular前端和spring后端
  • 使用本地 spring 云网关后面的 docker 在本地启动 angular 前端和 spring 后端
  • 直接在后端 docker 容器上公开一个端口(发出在服务器上使用 ssl 的网关)并针对该后端在本地启动 Angular 前端(使用 Angular 代理)

什么不起作用:

  • 使用 docker 容器启动后端并将 websocket 与 https/wss 一起使用

我按照这里https://cloud.spring.io/spring-cloud-gateway/reference/html/的描述配置了spring cloud gateway:

    - id: websocketinfo
      uri: http://app
      predicates:
        - Host=app.domain.com
        - Path=/api/ws/info/**
    - id: websocket
      uri: ws://app
      predicates:
        - Host=app.domain.com
        - Path=/api/ws/**

我的本​​地网关(使用 websocket 通信)和服务器网关之间的唯一区别是我在服务器上使用 p12 密钥启用了 ssl

我在spring cloud gateway中得到的错误信息是:

io.netty.handler.codec.http.websocketx.WebSocketHandshakeException: Invalid handshake response getStatus: 403

在 Spring 后端服务中,我经常遇到这些错误:

2020-04-09 07:03:55.298  WARN 1 --- [p-nio-80-exec-4] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotWritableException: No converter for [class java.util.LinkedHashMap] with preset Content-Type 'application/javascript;charset=UTF-8']

这让我很困惑,因为无论您在哪个环境中运行应用程序,这似乎都是应该发生的错误

【问题讨论】:

    标签: angular spring sockets stomp sockjs


    【解决方案1】:

    显然,这是旧版 Spring Cloud Gateway 的错误。更新到 spring 版本 2.2.1 后,一切都可以使用 ssl

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-31
      • 2022-07-07
      • 2014-07-21
      • 2020-11-22
      • 1970-01-01
      • 2023-03-15
      • 2015-03-21
      相关资源
      最近更新 更多