`
raymond.chen
  • 浏览: 1438196 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

服务网关Spring Cloud Gateway -- 网关过滤器工厂

 
阅读更多

 

网关过滤器工厂

      常用的filters配置

            filters:

                  - AddRequestHeader=X-Request-Foo, Bar

                  - SetRequestHeader=X-Response-Foo, Bar

                  - RemoveRequestHeader=X-Request-Foo

                  - RequestHeaderToRequestUri=X-New-Url

                  - AddResponseHeader=X-Response-Foo, Bar

                  - SetResponseHeader=X-Response-Foo, Bar

                  - RemoveResponseHeader=X-Response-Foo

                  - RewriteResponseHeader=X-Response-Foo, , password=[^&]+, password=***

                  - AddRequestParameter=foo, bar

                  - PreserveHostHeader  将检查的请求属性,以确定是否应发送原始主机头,而不是http客户端确定的主机头。

                  - SecureHeaders  为请求头添加安全相关的属性

                  - PrefixPath=/mypath  裁剪路径前缀

                  - StripPrefix=2  裁剪路径的层级个数

                  - RewritePath=/foo/(?<segment>.*), /$\{segment}  路径重写

                  - RedirectTo=302, http://acme.org

                  - SetPath=/{segment}

                  - SaveSession

                  - SetStatus=401

 

       filters:

             - name: Hystrix

                  args:

                       name: fetchIngredients

                       fallbackUri: forward:/fallback

 

       filters:

             - name: Retry

                  args:

                       retries: 3

                       statuses: BAD_GATEWAY

 

       filters:

             - name: RequestRateLimiter

                  args:

                        redis-rate-limiter.replenishRate: 10

                        redis-rate-limiter.burstCapacity: 20

 

 

       filters:

             - name: FallbackHeaders

                  args:

                        executionExceptionTypeHeaderName: Test-Header

                        executionExceptionMessageHeaderName: Test-Header

                        rootCauseExceptionTypeHeaderName: Test-Header

                        rootCauseExceptionMessageHeaderName: Test-Header

 

       filters:

            - name: RequestSize

                  args:

                        maxSize: 5000000

 

# 速率限制

# 它由RateLimiter的实现来完成的,默认只支持redis,需要添加`spring-boot-starter-data-redis-reactive`依赖

# 我们需要提供KeyResolver的实现,因为默认会使用PrincipalNameKeyResolver,在不使用Spring Security的情况下几乎不会用到Principal

# 除此外,我们也可以提供自定义的RateLimiter,#{@myRateLimiter}是一个SpEL表达式,用于从Spring上下文内读取bean

 

- name: RequestRateLimiter

  args:

    redis-rate-limiter.replenishRate: 10

    redis-rate-limiter.burstCapacity: 20

 

- name: RequestRateLimiter

  args:

    rate-limiter: "#{@myRateLimiter}"

    key-resolver: "#{@userKeyResolver}"

 

 自定义网关过滤器工厂

        网关过滤器工厂的顶级接口是GatewayFilterFactory,可以直接继承它的两个抽象类来简化开发AbstractGatewayFilterFactory和AbstractNameValueGatewayFilterFactory,这两个抽象类的区别就是前者接收一个参数,后者接收两个参数。

 

        自定义类名格式必须为 filterName + GatewayFilterFactory,比如类名为Custom1GatewayFilterFactory的话,则filterName就是Custom1。

 

    Custom1GatewayFilterFactory类源码:

public class Custom1GatewayFilterFactory extends AbstractGatewayFilterFactory<Custom1GatewayFilterFactory.Config> {
	public Custom1GatewayFilterFactory(){
		//需要将Config类传递到父类
		super(Config.class);
	}
	
	@Override
	public GatewayFilter apply(Config config) {
		return (exchange, chain) -> {
			//pre生命周期:在chain.filter之前的代码
			System.out.println("message=" + config.getMessage());
			exchange.getAttributes().put("startTime", System.currentTimeMillis());
			
			//post生命周期:在then里面的代码
			return chain.filter(exchange).then(
				Mono.fromRunnable(() -> {
					Long startTime = exchange.getAttribute("startTime");
					if(startTime != null){
						System.out.println(exchange.getRequest().getURI().getRawPath() + ": " + (System.currentTimeMillis() - startTime));
					}
				})
			);
		};
	}
	
	public static class Config{
		private String message;

		public String getMessage() {
			return message;
		}

		public void setMessage(String message) {
			this.message = message;
		}
	}
}

 

    在启动类定义Bean对象:

@Bean
public Custom1GatewayFilterFactory getPreGatewayFilterFactory(){
	return new Custom1GatewayFilterFactory();
}

 

    自定义过滤器类的配置使用:

spring:
  cloud:
    gateway:
      routes:
        - id: a
          uri: lb://service-consumer-1
          predicates:
            - Path=/cjm/**
          filters:
            - name: Custom1  #自定义过滤器类
              args:
                message: message value

     

    也可以通过spring.cloud.gateway.default-filters配置在全局,作用在所有路由上。

spring:
  cloud:
    gateway:
      default-filters:
        - name: Custom1
          args:
            message: message value

 

分享到:
评论

相关推荐

    springcloud Gateway网关-压测用.zip

    这个名为"springcloud Gateway网关-压测用.zip"的压缩包包含了一个用于性能测试的配置,目的是评估和优化Gateway的处理能力。下面我们将深入探讨SpringCloud Gateway的相关知识点,以及如何使用性能测试工具进行压测...

    spring-cloud-gateway-demo.zip

    Spring Cloud Gateway 作为微服务架构中的 API 网关,它承担着路由请求、过滤器链处理、动态路由策略等任务。在与 Nacos 结合时,Gateway 可以从 Nacos 中动态获取服务列表,根据这些信息来路由请求到对应的服务实例...

    最新Spring Cloud Gateway 官方参考指南-中文版-3.x

    在配置路由断言工厂(Route Predicate Factories)和网关过滤器工厂(Gateway Filter Factories)时,可以使用简写或完全展开的方式。例如,在`application.yml`中,可以定义路由及其断言和过滤器,以控制请求如何被...

    spring-cloud-gateway-example-master.zip

    - **路由(Route)**:路由是Gateway的核心概念,定义了从特定的请求到指定服务的映射,包括ID、目标URI、一系列的过滤器。 - **过滤器(Filter)**:过滤器用于处理请求和响应,如添加请求头、限流、熔断等,分为全局...

    springcloud gateway 全局过滤器统一签名判定.doc

    在Spring Cloud Gateway中,全局过滤器(Global Filter)是一种强大的机制,用于在请求路由到具体的服务之前或之后执行通用的处理逻辑。在这个场景中,我们关注的是如何利用全局过滤器来实现统一的签名验证,这在...

    springcloud下通过gateway转发websocket

    在IT行业中,Spring Cloud Gateway作为Spring Cloud生态体系中的一个关键组件,被广泛用于构建微服务架构中的API网关。这个框架允许我们集中处理各种请求,包括路由、过滤、安全等,极大地简化了服务间的通信。而...

    spring-cloud使用的各种示例

    - [springcloud(十六):服务网关 Spring Cloud GateWay 服务化和过滤器](http://www.ityouknow.com/springcloud/2019/01/19/spring-cloud-gateway-service.html) - [springcloud(十七):服务网关 Spring Cloud ...

    spring-cloud.zip

    接下来,Spring Cloud Gateway作为新一代的API网关,它基于Spring Framework 5、Project Reactor和Spring Boot 2构建,提供路由转发、过滤器等功能,简化了API管理和安全控制。在项目中,Gateway可能被用来处理所有...

    Spring Cloud Gateway 整合 Spring Security 统一登录认证鉴权

    在构建分布式系统时,Spring Cloud Gateway 作为微服务架构中的边缘服务或 API 网关,扮演着至关重要的角色。它负责路由请求到相应的微服务,并可以提供过滤器功能,如限流、熔断等。而Spring Security 则是 Java ...

    spring-cloud-gateway-oauth2

    在Spring Cloud Gateway中,我们可以利用Spring Security OAuth2模块,创建自定义的OAuth2过滤器,实现对API请求的授权验证。 具体步骤如下: 1. 添加依赖:在项目中引入Spring Security和OAuth2的相关依赖,包括`...

    spring-cloud-starter-netflix-zuul.zip已经闭源的jar包,pom

    Spring Cloud Gateway作为Spring Cloud的下一代API网关,基于Spring Framework 5、Project Reactor和Spring WebFlux构建,提供了更高效、更灵活的路由能力,并且有更好的性能表现。同时,它还集成了Spring Cloud的...

    spring cloud gateway 例子

    Spring Cloud Gateway 是一款基于 Spring Framework 5 和 Spring Boot 2 设计的云原生微服务网关,它旨在提供一种简单而有效的方式来对 API 进行路由,同时提供了过滤器功能,可以进行权限验证、限流、日志记录等...

    Spring Cloud Gateway的全局异常处理

    Spring Cloud Gateway作为一款基于Spring Framework 5、Project Reactor和Spring Boot 2.0构建的云原生网关框架,它提供了强大的路由转发能力和灵活的过滤器模型,能够很好地满足微服务网关的各种需求。然而,在实际...

    spring cloud gateway跨域实现

    Spring Cloud Gateway 是Spring官方推出的一款现代化的网关服务,它构建于Spring Framework 5、Project Reactor 和 Spring Boot 2之上,提供了高性能、易用的API路由管理、过滤器等功能,是Spring Cloud生态中的重要...

    spring cloud zookeeper gateway

    Spring Cloud Zookeeper Gateway 是一个基于Spring Cloud生态系统的项目,它结合了Zookeeper作为微服务注册中心和Spring Cloud Gateway作为服务网关的解决方案。这个项目旨在为开发者提供一个快速搭建微服务架构的...

    SpringCloud-Gateway demo.rar

    这个“SpringCloud-Gateway demo.rar”文件很可能是包含了演示如何设置和使用 Spring Cloud Gateway 的一个示例项目。 在Spring Cloud Gateway中,核心概念有以下几点: 1. **路由(Route)**:路由是 Gateway 的...

    springcloud zuul gateway 服务网关

    SpringCloud Zuul Gateway 服务网关是Spring Cloud生态系统中的一个重要组件,它主要负责微服务架构中的路由转发和过滤器功能。Zuul是Netflix开源的一个边缘服务,而Gateway则是Spring Cloud针对Zuul进行的升级版,...

    SpringCloud.03.网关Gateway 配置文件

    在Spring Cloud生态体系中,Spring Cloud Gateway作为新一代的API网关,被广泛应用于微服务架构中,用于统一处理请求路由、过滤器链、限流、熔断等核心功能。本篇将详细介绍Spring Cloud Gateway的配置文件相关知识...

    springcloud实现gate网关转发功能和整合websocket源码

    Spring Cloud Gateway作为Spring Cloud生态系统的组件,是新一代的API网关,它旨在提供一种简单有效的方式来对微服务进行路由,同时提供了过滤器功能,可以进行限流、熔断、鉴权等操作。它的主要优点包括性能高、...

    Spring Cloud Eureka + Spring Cloud Gateway + Spring Cloud Zipkin

    它支持基于Java断言语言(Predicate)和过滤器(Filter)来定义路由规则,方便灵活地配置和管理API,减轻了后端服务的负担。 **Spring Cloud Zipkin** 是一个分布式跟踪系统,它可以帮助开发者收集服务间的调用时间...

Global site tag (gtag.js) - Google Analytics