环境:springboot2.3.7+springcloudHoxton.SR9路由过滤器允许以某种方式修改传入的HTTP请求或输出HTTP响应。路由过滤器的范围是特定路由。SpringCloudGateway包括许多内置的GatewayFilter工厂。1、AddRequestHeader过滤器工厂函数:在请求中添加头信息(服务于目标)。对应过滤器工厂AddRequestHeaderGatewayFilterFactoryspring:cloud:gateway:enabled:truediscovery:locator:enabled:truelowerCaseServiceId:trueroutes:-id:AddRequestHeader_filteruri:http://localhost:20001predicates:-Path=/api/{user}filters:-AddRequestHeader=access-token,123456789向目标服务http://localhost:20001/api/xxx添加请求头access-token信息。20001服务中有对应接口:@RestController@RequestMapping("/api/")publicclassUsersController{@ResourceprivateHttpServletRequestrequest;@GetMapping("/{user}")publicObjectsave(@PathVariable("user")Stringusername){System.out.println(用户名);System.out.println("access-token="+request.getHeader("access-token"));return"success";}}启动两个服务,测试:20001服务控制台输出:动态头信息配置:spring:cloud:gateway:enabled:truediscovery:locator:enabled:truelowerCaseServiceId:trueroutes:-id:AddRequestHeader_filteruri:http://localhost:20001predicates:-Path=/api/{token}filters:-AddRequestHeader=access-token,{token}test:2.AddRequestParameter过滤器工厂函数:向下游服务添加查询参数。对应过滤器工厂AddRequestParameterGatewayFilterFactoryspring:cloud:gateway:enabled:truediscovery:locator:enabled:truelowerCaseServiceId:trueroutes:-id:add_request_parameter_routeuri:http://localhost:20001predicates:-Path=/api/queryfilters:-AddRequestParameter=username,admintargetService:@RestController@RequestMapping("/api/")publicclassUsersController{@GetMapping("/query")publicObjectquery(Stringusername){return"query"+username;}}测试:3.AddResponseHeader过滤工厂函数:在响应头中添加标题信息。对应过滤器工厂AddResponseHeaderGatewayFilterFactoryspring:cloud:gateway:enabled:truediscovery:locator:enabled:truelowerCaseServiceId:trueroutes:-id:add_response_header_routeuri:http://localhost:20001predicates:-Path=/api/queryfilters:-AddResponseHeader=server-id,nginx-001test:4.PrefixPath过滤器工厂函数:在原请求路径上增加一个前缀路径。对应过滤器工厂PrefixPathGatewayFilterFactoryspring:cloud:gateway:enabled:truediscovery:locator:enabled:truelowerCaseServiceId:trueroutes:-id:prefixpath_routeuri:http://localhost:20001predicates:-Path=/api-1/**filters:-PrefixPath=/api-1-StripPrefix=2这里使用StripPrefix过滤器进行演示。如果没有配置StripPrefix,那么请求时转发给服务的地址会是:http://xxxx/api-1/api-1/api/query显然这个地址在我们的服务上是不存在的。StripPrefix过滤器的作用是拦截路径,拦截若干条路径。比如这里的http://xxxx/api-1/api-1/api/query会被拦截为http://xxxx/api/query然后转发。测试:5、StripPrefix过滤器工厂的作用:拦截指定网段的请求路径,然后进行路由转发。对应过滤器工厂StripPrefixGatewayFilterFactoryspring:cloud:gateway:enabled:truediscovery:locator:enabled:truelowerCaseServiceId:trueroutes:-id:prefixpath_routeuri:http://localhost:20001predicates:-Path=/api-1/**filters:-StripPrefix=1测试:请求:http://xxx/api-1/api/query拦截后:http://xxx/api/query这里的StripPrefix=1表示只拦截少数路径。6.重试过滤器工厂功能:对不同的响应结果进行重试。对应过滤器工厂RetryGatewayFilterFactoryspring:cloud:gateway:enabled:truediscovery:locator:enabled:truelowerCaseServiceId:trueroutes:-id:retry_testuri:http://localhost:20001predicates:-Path=/api-1/**filters:-StripPrefix=1-name:Retryargs:retries:3statuses:INTERNAL_SERVER_ERRORmethods:GET,POST说明:retries:重试次数status:需要重试的状态码,值在org.springframework.http.HttpStatusmethods:请求方法需要重试,取值在org.springframework.http.HttpMethod系列:HTTP状态码序列,取值在org.springframework.http.HttpStatus.Seriesexceptions:异常列表,哪些异常会被重试。接口服务:@GetMapping("/query")publicObjectquery(Stringusername){if("dead".equals(username)){thrownewRuntimeException("Wrongusername");}return"query"+username;}当请求参数为An用户名已死时会抛出异常。测试:成功:失败:7.RedirectTo过滤工厂功能:将原请求重定向到指定的Url。对应过滤器工厂RedirectToGatewayFilterFactoryspring:cloud:gateway:enabled:truediscovery:locator:enabled:truelowerCaseServiceId:trueroutes:-id:prefixpath_routeuri:http://localhost:20001predicates:-Path=/api-1/**filters:-RedirectTo=302,http://localhost:20001/api/query请求会被重定向到http://localhost:20001/api/query8.default过滤器工厂作用:默认过滤器,为所有路由配置默认过滤功能。spring:cloud:gateway:enabled:truediscovery:locator:enabled:truelowerCaseServiceId:truedefault-filters:-PrefixPath=/api-1-AddRequestHeader=access-token,123以上的配置会为所有路由添加前缀和请求头信息。以上是一些使用较多的内置Filter。