gateway-路由過濾器 GatewayFilter


GatewayFilter是網關中提供的一種過濾器,可以對進入網關的請求和微服務返回的響應做處理:

 

Spring提供了31種不同的路由過濾器工廠。例如:

名稱                說明
AddRequestHeader    給當前請求添加一個請求頭
RemoveRequestHeader    移除請求中的一個請求頭
AddResponseHeader    給響應結果中添加一個響應頭
RemoveResponseHeader    從響應結果中移除有一個響應頭
RequestRateLimiter    限制請求的流量

 

實例:給所有進入userservice的請求添加一個請求頭
給所有進入userservice的請求添加一個請求頭:Truth=itcast is freaking awesome!

1.局部過濾器
實現方式:在gateway中修改application.yml文件,給userservice的路由添加過濾器:

spring:
    gateway:
      routes:
        - id: user-service # 路由標示,必須唯一
          uri: lb://userservice # 路由的目標地址
          predicates: ## 路由斷言,也就是判斷請求是否符合路由規則的條件
            - Path=/user/** # 路徑斷言,判斷路徑是否是以/user開頭,如果是則符合
          filter: 
            - AddRequestHeader=Truth,zhangsan is freaking awesome! #添加請求頭

 

2.默認過濾器
如果要對所有的路由都生效,則可以將過濾器工廠寫到default下。格式如下:

spring:
    gateway:
      routes:
        - id: user-service # 路由標示,必須唯一
          uri: lb://userservice # 路由的目標地址
          predicates: ## 路由斷言,也就是判斷請求是否符合路由規則的條件
            - Path=/user/** # 路徑斷言,判斷路徑是否是以/user開頭,如果是則符合
          #filter: 
          #  - AddRequestHeader=Truth,zhangsan is freaking awesome! #添加請求頭
        - id: order-service
          uri: lb://orderservice
          predicates:
            - Path=/order/**
            - Before=2037-01-20T17:42:47.789-07:00[Asia/Shanghai]
            #- After=2037-01-20T17:42:47.789-07:00[Asia/Shanghai]
      default-filters:
        - AddRequestHeader=Truth,lisi is freaking awesome! #添加請求頭

 

@RestController @RequestMapping("order") public class OrderController { @Autowired private OrderService orderService; @GetMapping("{orderId}") public Order queryOrderByUserId(@PathVariable("orderId") Long orderId, @RequestHeader(value = "Truth", required = false) String truth) { System.out.println("truth: " + truth); // 根據id查詢訂單並返回
        return orderService.queryOrderById(orderId); } }

 

 

 

總結:
過濾器的作用是什么?
a.對路由的請求或響應做加工處理,比如添加請求頭
b.配置在路由下的過濾器只對當前路由的請求生效


defaultFilters的作用是什么?
a.對所有路由都生效的過濾器


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM