SpringCloud第十一章Gateway新一代网关(Filter的使用)

7、Filter的使用

7.1、是什么

在这里插入图片描述

路由过滤器可用于修改进入的HTTP请求和返回的HTTP响应,路由过滤器只能指定路由进行使用。

Spring Cloud Gateway 内置了多种路由过滤器,他们都由GatewayFilter的工厂类来产生

  • Spring Cloud Gateway的Filter

    • 生命周期,Only Two

      • pre
      • post
    • 种类,Only Two

      • GatewayFilter

        https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/#the-addrequestparameter-gatewayfilter-factory
        31种之多。。。。。

        在这里插入图片描述

    • GlobalFilter

      在这里插入图片描述

  • 常用的GatewayFilter

    • AddRequestParameter

      YML

      server:
        port: 9588
      
      spring:
        application:
          name: cloud-gateway
        cloud:
          gateway:
            discovery:
              locator:
                enabled: true #开启从注册中心动态创建路由的功能
                lower-case-service-id: true #使用小写服务名,默认是大写
            routes:
              - id: payment_routh #payment_route #路由的ID,没有固定规则但要求唯一,建议配合服务名
                uri: lb://cloud-provider-payment #匹配后的目标服务地址,供服务的路由地址
                #uri: http://localhost:8001 #匹配后提供服务的路由地址
                filters:
                  - AddRequestParameter=X-Request-Id,1024 #过滤器工厂会在匹配的请求头加上一对请求头,名称为X-Request-Id值为1024
                predicates:
                  - Path=/payment/lb/**        # 断言,路径相匹配的进行路由
                  - Method=GET,POST
      
      eureka:
        instance:
          hostname: cloud-gateway-service
        client: #服务提供者provider注册进eureka服务列表内
          service-url:
            register-with-eureka: true
            fetch-registry: true
            defaultZone: http://eureka7001.com:7001/eureka
      
    • 省略

7.2、自定义过滤器

自定义全局GlobalFilter

  • 两个主要接口介绍 implements GlobalFilter,Ordered

  • 能干嘛

    全局日志记录、统一网关鉴权。。。。。。。。

  • 案例代码

    package com.likun.springcloud.filter;
    
    import org.springframework.cloud.gateway.filter.GatewayFilterChain;
    import org.springframework.cloud.gateway.filter.GlobalFilter;
    import org.springframework.core.Ordered;
    import org.springframework.http.HttpStatus;
    import org.springframework.stereotype.Component;
    import org.springframework.web.server.ServerWebExchange;
    import reactor.core.publisher.Mono;
    
    /**
     * @author likun
     * @create 2021-04-30 23:25
     */
    @Component//必须加,必须加,必须加
    public class MyLogGatWayFilter implements GlobalFilter, Ordered {
    
        @Override
        public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
            String uname = exchange.getRequest().getQueryParams().getFirst("uname");
            if (uname == null) {
                System.out.println("*******对不起,用户名为null,无法登录");
                exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);
                return exchange.getResponse().setComplete();
            } else {
                return chain.filter(exchange);
            }
        }
    
        @Override
        public int getOrder() {
            return 0;
        }
    }
    
  • 测试

    正确:http://localhost:9527/payment/lb?uname=lk

    在这里插入图片描述

    错误:http://localhost:9527/payment/lb

    在这里插入图片描述

(完)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值