Spring Cloud Gateway 似乎是在将请求转发到后端之前执行某种验证(特别是身份验证检查)的有效工具,但我找不到太多专注于如何在之前执行身份验证验证的教程将请求转发给它的命运.
到目前为止我找到的最好的教程是这个来自 Baeldung 但它没有解释以下问题:
- 如何在 Spring Cloud Gateway 函数中创建新的 HTTP 请求,独立于预期的请求流,并使用其响应修改传入请求。
- 如何在 Spring Cloud Gateway 过滤器函数中“取消”传入的 HTTP 请求并返回过滤器网关预先定义的内容。我设法让它与
return exchange.getResponse().setComplete();
一起工作,并使用静态字符串更改主体,但没有使用从前面提到的 HTTP 请求返回的某些值。
让我描述一下我想要实现的每一步:
条件:
- 如果“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 响应,而不向后端转发任何内容。
请求流的时序图: