Spring boot 用于添加身份验证标头的WebClient筛选器

Spring boot 用于添加身份验证标头的WebClient筛选器,spring-boot,http,webclient,spring-webclient,Spring Boot,Http,Webclient,Spring Webclient,我将要实现许多对外部服务的请求,这些请求需要身份验证头 身份验证服务是一个外部服务,为了检索令牌,我需要进行HTTP调用 我正在考虑的策略是创建一个附加到WebClient的过滤器,该过滤器调用此服务来获取令牌,然后将其添加到头中 当然,我将实现一些缓存层来检索令牌,但关键是我将向我的请求添加一个请求 你认为这是一个有效的方法吗?或者我应该在主请求之外显式调用身份验证服务吗?如果它是OAuth2,并且您的请求需要JWT令牌,Spring Security和WebClient也可以这样做(,)。我

我将要实现许多对外部服务的请求,这些请求需要身份验证头

身份验证服务是一个外部服务,为了检索令牌,我需要进行HTTP调用

我正在考虑的策略是创建一个附加到WebClient的过滤器,该过滤器调用此服务来获取令牌,然后将其添加到头中

当然,我将实现一些缓存层来检索令牌,但关键是我将向我的请求添加一个请求


你认为这是一个有效的方法吗?或者我应该在主请求之外显式调用身份验证服务吗?

如果它是OAuth2,并且您的请求需要JWT令牌,Spring Security和
WebClient也可以这样做(,)。我不会在过滤器中实现此逻辑,而是创建一个
WebClient
过滤器,为每个请求设置
Authorization:Bearer XYZ
头,并从外部或通过Spring传递令牌

你也可以看看这个。它定期在后台线程中为您获取OAuth2令牌,您可以将其传递给
WebClient

WebClient
的自定义筛选器可能如下所示:

private ExchangeFilterFunction authHeader(String token) {
    return (request, next) -> next.exchange(ClientRequest.from(request).headers((headers) -> {
      headers.setBearerAuth(token);
    }).build());
}

如果是OAuth2,并且您的请求需要JWT令牌,那么Spring安全性和
WebClient
也可以这样做(,)。我不会在过滤器中实现此逻辑,而是创建一个
WebClient
过滤器,为每个请求设置
Authorization:Bearer XYZ
头,并从外部或通过Spring传递令牌

你也可以看看这个。它定期在后台线程中为您获取OAuth2令牌,您可以将其传递给
WebClient

WebClient
的自定义筛选器可能如下所示:

private ExchangeFilterFunction authHeader(String token) {
    return (request, next) -> next.exchange(ClientRequest.from(request).headers((headers) -> {
      headers.setBearerAuth(token);
    }).build());
}

你能告诉我“字符串令牌”参数来自哪里吗?我的意思是,我们必须将此筛选器包括到Webclient.builder()中。。阶段因此,此参数在这里不可用,对吗?在使用生成器创建
WebClient
时,您可以传递一个lambda函数,该函数委托调用您的令牌提供程序以检索最新令牌,而不是硬编码令牌。您能告诉我“字符串令牌”参数来自何处吗?我的意思是,我们必须将此筛选器包括到Webclient.builder()中。。阶段因此,此参数在这里不可用,对吗?在使用生成器创建
WebClient
时,您可以传递lambda函数,委托调用您的令牌提供程序以检索最新令牌,而不是硬编码令牌