Java 对spring云网关中GlobalFilter中的其他服务的请求
我有一个微服务负责生成具有不同信息的JWT 出于某种原因,SpringGateway向jwt注入了一个自定义过滤器 问题是,过滤器无法在收到响应之前进行阻塞 因此,在请求中注入jwt之前,过滤器是链接的 有什么办法解决这个问题吗 请参阅我的过滤器:Java 对spring云网关中GlobalFilter中的其他服务的请求,java,spring,spring-cloud,spring-webflux,Java,Spring,Spring Cloud,Spring Webflux,我有一个微服务负责生成具有不同信息的JWT 出于某种原因,SpringGateway向jwt注入了一个自定义过滤器 问题是,过滤器无法在收到响应之前进行阻塞 因此,在请求中注入jwt之前,过滤器是链接的 有什么办法解决这个问题吗 请参阅我的过滤器: [...] @Component public class AddJwtFilter implements GlobalFilter { [...] Mono<String> response = webClient.g
[...]
@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);
}
}
[…]
@组成部分
公共类AddJwtFilter实现了GlobalFilter{
[...]
Mono response=webClient.get().uri(“https://localhost:9001/security/generatejwt/{accessToken},accessToken.retrieve().BodyToNo(String.class);
response.subscribe(System.out::println);
System.out.println(“我返回链”);
返回链。过滤器(交换);
}
}
println不是我想要的真正的处理方法,它只是检查响应何时完成。
请求是正确的,“println”为我提供了预期的响应
非常感谢您的回复。如评论中所述,您需要链接所有内容
@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);
});
}
你需要把Mono链接起来,而不是订阅。非常感谢你们两位给出的有用答案。反应式程序设计对我们来说是新的,我们需要更多地研究单分子链和通量链的微妙之处。祝您今天过得愉快。