0
点赞
收藏
分享

微信扫一扫

5、局部-内置过滤器工厂

微笑沉默 2022-02-18 阅读 27

过滤器工厂官网:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gatewayfilter-factories

过滤器工厂作用参数
AddRequestHeader为原始请求添加HeaderHeader的名称及值
AddRequestParameter为原始请求添加请求参数参数名称及值
AddResponseHeader为原始响应添加HeaderHeader的名称及值
DedupeResponseHeader剔除响应头中重复的值需要去重的Header名称及去重策略
Hystrix为路由引入Hystrix的断路器保护HystrixCommand 的名称
FallbackHeaders为fallbackUri的请求头中添加具体的异常信息Header的名称
PrefixPath为原始请求路径添加前缀前缀路径
PreserveHostHeader性,路由过滤器会检查该属性以决定是否要发送原始的 Host
RequestRateLimiter用于对请求限流,限流算法为令牌桶keyResolver、rateLimiter、statusCode、 denyEmptyKey、emptyKeyStatus
RedirectTo将原始请求重定向到指定的URLhttp状态码及重定向的url
RemoveHopByHopHeadersFilter为原始请求删除IETF组织规定的一系列Header默认就会启用,可以通过配置指定仅删除哪些Header
RemoveRequestHeader为原始请求删除某个HeaderHeader名称
RemoveResponseHeader为原始响应删除某个HeaderHeader名称
RewritePath重写原始的请求路径原始路径正则表达式以及重写后路径的正则表达式
RewriteResponseHeader重写原始响应中的某个HeaderHeader名称,值的正 则表达式,重写后的值
SaveSession在转发请求之前,强制执行WebSession::save 操作
secureHeaders为原始响应添加一系列起安全作用的响应头无,支持修改这些安全响应头的值
SetPath修改原始的请求路径修改后的路径
SetResponseHeader修改原始响应中某个Header的值修改原始响应中某个Header的值 Header名称,修改后的值
SetStatus修改原始响应的状态码HTTP 状态码,可以是数字,也可以是字符串
StripPrefix用于截断原始请求的路径使用数字表示要截断的路径的数量
Retry针对不同的响应进行重试retries、statuses、methods、series
RequestSize设置允许接收最大请求包的大 小。如果请求包大小超过设置的值,则返回 413 Payload Too Large请求包大小,单位为字节,默认值为5M
ModifyRequestBody在转发请求之前修改原始请求体内容修改后的请求体内容
ModifyResponseBody修改原始响应体的内容修改后的响应体内容

1.1 添加请求头

在gateway模块中

server:
  port: 8070
spring:
  application:
    name: api-gateway
  cloud:
    #gateway的配置
    gateway:
      #路由配置 [路由 就是指定当请求满足什么条件的时候转到哪个微服务]
      routes:
        - id: order_route #路由的唯一标识,路由到order
          uri: lb://order-service #需要转发的地址,lb指的是从nacos中按照名称获取微服务,并遵循负载均衡策略
          #断言规则,就是路由转发要满足的条件
          predicates:
            # 当客户端访问http://localhost:8070/order/add 会路由到↓
            #  http://localhost:8081/order/add
            - Path=/order/** #当请求路径满足Path指定的规则时,才进行路由转发
          filters: #过滤器,请求在传递过程中可以通过过滤器对其进行一定的修改
            - AddRequestHeader=X-Request-color, blue #添加请求头
    #配置nacos
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        username: nacos
        password: nacos

在order子模块

package com.example.order.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
@RequestMapping("/order")
public class OrderController {

    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping("/add")
    public String add(){
        System.out.println("下单成功");
        String forObject = restTemplate.getForObject("http://stock-service/stock/reduck", String.class);
        return "Hello World " + forObject;
    }

    @RequestMapping("/header")
    public String header(@RequestHeader("X‐Request‐color") String color){
        return color;
    }
}

启动测试

启动nacos,order,stock,gateway模块

访问:http://localhost:8070/order/header

在这里插入图片描述

1.2 为匹配的路由统一添加前缀

在gateway模块中

在order子模块

server:
  port: 8081
  servlet:
    context-path: /myorder
#应用名称(nacos会将该名称当做服务名称)
spring:
  application:
    name: order-service
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848
      discovery:
        username: nacos
        password: nacos
        namespace: public

启动测试

启动nacos,order,stock,gateway服务

访问:http://localhost:8070/order/add

在这里插入图片描述

举报

相关推荐

0 条评论