【问题标题】:Request to an other service in a GlobalFilter in spring cloud gateway向 Spring Cloud Gateway 中的 Global Filter 中的另一个服务请求
【发布时间】:2020-03-18 09:55:32
【问题描述】:

我有一个微服务负责生成具有不同信息的 JWT。

由于某种原因,jwt 是由 Spring 网关使用自定义过滤器注入的。

问题是,过滤器无法在响应之前阻止。

所以过滤器在 jwt 可以被注入请求之前被链接起来。

有解决这个问题的办法吗?

查看我的过滤器:

[...]
@Component
public class AddJwtFilter implements GlobalFilter {
[...]

        Mono<String> response = webClient.get().uri("https://localhost:9001/security/generatejwt/{accessToken}", accessToken).retrieve().bodyToMono(String.class);

        response.subscribe(System.out::println);

        System.out.println("I return the chain");
        return chain.filter(exchange);
    }
}

System.out::println 不是我想要的真正处理,它只是检查响应何时完成。 请求是正确的,“println”给了我预期的响应。

非常感谢您的回复。

【问题讨论】:

  • 你需要链接 Mono 而不是订阅

标签: java spring spring-cloud spring-webflux


【解决方案1】:

就像在 cmets 中所说的那样,您需要将所有内容链接起来。

@Component
public class AddJwtFilter implements GlobalFilter {
    return webClient.get()
             .uri("https://localhost:9001/security/generatejwt/{accessToken}", 
                  accessToken)
             .retrieve()
             .bodyToMono(String.class).flatMap(response -> {
                 System.out.println(response);
                 return chain.filter(exchange);
             });
}

【讨论】:

  • 非常感谢您对两位的有用回答。反应式编程对我们来说是新事物,我们需要对这种具有单声道和通量的链的微妙之处进行更多研究。祝你有美好的一天。
猜你喜欢
  • 2020-09-12
  • 2020-01-14
  • 2020-04-30
  • 1970-01-01
  • 2022-01-13
  • 2020-08-02
  • 2023-03-11
  • 1970-01-01
  • 2018-11-20
相关资源
最近更新 更多