如何在Spring Cloud Gateway中对外部API进行身份验证,然后再将请求转发给它的命运?

问题描述 投票:0回答:0

Spring Cloud Gateway 似乎是在将请求转发到后端之前执行某种验证(特别是身份验证检查)的有效工具,但我找不到太多专注于如何在之前执行身份验证验证的教程将请求转发给它的命运.

到目前为止我找到的最好的教程是这个来自 Baeldung 但它没有解释以下问题:

  1. 如何在 Spring Cloud Gateway 函数中创建新的 HTTP 请求,独立于预期的请求流,并使用其响应修改传入请求。
  2. 如何在 Spring Cloud Gateway 过滤器函数中“取消”传入的 HTTP 请求并返回过滤器网关预先定义的内容。我设法让它与
    return exchange.getResponse().setComplete();
    一起工作,并使用静态字符串更改主体,但没有使用从前面提到的 HTTP 请求返回的某些值。

让我描述一下我想要实现的每一步:

  • 客户端使用 X-AUTH-TOKEN=${some-token} 标头和 HTTP BODY=${some-body} 向 http://scg.domain/request(spring cloud gateway)执行 POST 请求。
  • spring cloud gateway中的一个过滤函数拦截请求。
  • 过滤器向 http://auth.domain/checkToken(令牌验证后端)发送 HTTP 客户端请求,请求体中包含 ${some-token}。

条件:

  • 如果“Token Validation Back-End”在正文中返回 200 和 ${some-user-id},则过滤器通过添加标头和值 X-USER-ID=${some-user-id} 来修改 Client 的请求最后将其转发到http://be.domain/request(后端)。后端响应通常转发给用户。
  • (Else) 如果“令牌验证后端”返回 4xx 或 5xx,Spring Cloud Gateway 必须向客户端返回 4xx 或 5xx 响应,而不向后端转发任何内容。

请求流的时序图:

java spring-webflux project-reactor spring-cloud-gateway spring-webclient
© www.soinside.com 2019 - 2024. All rights reserved.