在Spring Cloud Gateway中请求GlobalFilter中的其他服务

时间:2019-11-22 10:31:42

标签: java spring spring-cloud spring-webflux

我有一个微服务,负责生成具有不同信息的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”给了我期望的响应。

非常感谢您的回复。

1 个答案:

答案 0 :(得分:1)

就像在评论中说的那样,您需要链接所有内容。

@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);
             });
}