1.概述

在本教程中,我们将进行探索WebClient过滤器春天WebFlux,一个功能性的、反应性的web框架。

2.请求过滤器

过滤器可以拦截、检查和修改客户机请求(或响应)。过滤器非常适合为每个请求添加功能,因为逻辑停留在一个地方。用例包括监视、修改、记录和对客户机请求进行身份验证,这只是其中的一些。

一个请求有一个由0个或多个过滤器组成的有序链。

在Spring Reactive中,过滤器是functional接口的实例ExchangeFilterFunction。filter函数有两个参数ClientRequest修改和下一个ExchangeFilterFunction

通常,过滤器函数通过调用过滤器链中的下一个返回:

ExchangeFilterFunction filterFunction = (clientRequest, nextFilter) -> {LOG.info("WebClient fitler executed");返回nextFilter.exchange (clientRequest);};

3.WebClient过滤

实现请求过滤器后,我们必须将其“附加”到WebClient实例。这只能在创建WebClient

那么,我们来看看如何创建aWebClient。第一个选项是调用WebClient.create ()带或不带基础URL:

WebClient WebClient = WebClient.create();

不幸的是,这不允许添加过滤器。那么,第二个选择就是我们正在寻找的。

通过使用WebClient.builder ()我们可以添加过滤器:

WebClient WebClient = WebClient.builder() .filter(filterFunction) .build();

4.一个自定义的过滤器

让我们从统计客户机发送的HTTP GET请求的过滤器开始。

过滤器检查请求方法,并在GET请求的情况下增加一个“全局”计数器:

交换ilterfunction countingFunction = (clientRequest, nextFilter) -> {HttpMethod HttpMethod = clientRequest.method();if (httpMethod == httpMethod . get) {getCounter.incrementAndGet();}返回nextFilter.exchange (clientRequest);};

我们将定义的第二个过滤器将一个版本号附加到请求URL路径。我们利用ClientRequest.from ()方法从当前请求对象创建一个新的请求对象,并设置修改后的URL。

随后,我们继续使用新的修改后的请求对象执行过滤器链:

urlModifyingFilter = (clientRequest, nextFilter) -> {String oldUrl = clientRequest.url().toString();URI newUrl = URI。create(oldUrl + "/" + version);ClientRequest filteredRequest = ClientRequest.from(ClientRequest) .url(newUrl) .build();返回nextFilter.exchange (filteredRequest);};

接下来,让我们定义一个过滤器来记录发送请求的方法及其url。这些细节可以在请求对象中找到。

然后,我们要做的就是打印到某个输出流:

交换ilterfunction logingfilter = (clientRequest, nextFilter) -> {printStream. getfilter . getfilter . getfilter . getfilter . getfilter . getfilter . getfilter . getfilter。print("发送请求" + clientRequest.method() + " " + clientRequest.url());返回nextFilter.exchange (clientRequest);};

5.一个标准的过滤器

最后,让我们研究一下基本身份验证-一个非常常见的请求过滤用例。

辅助类ExchangeFilterFunctions提供basicAuthentication ()filter函数,它负责添加授权请求的头。

因此,我们不需要为它定义一个过滤器:

WebClient = WebClient.builder() .filter(ExchangeFilterFunctions. filter)。basicAuthentication(用户、密码).build ();

6.结论

在这篇简短的文章中,我们探索了在Spring过滤WebFlux客户端。

和往常一样,代码示例可以在在github上

通用的底部

通过。开始使用Spring 5和Spring Boot 2学习的春天课程:

>>查看课程
本文评论关闭!