Spring Cloud Gateway

目录

一、Gateway初始化

  1. 添加依赖
xml 复制代码
<!--gateway 依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- nacos依赖 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 负载均衡器 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
  1. 开启默认路由规则(使得localhost/order会自动去Nacos找order服务)
yml 复制代码
server:
  port: 80
spring:
  application:
    name: gateway
  cloud:
    gateway:
      discovery:
        locator:
          # 开启默认的路由规则,会根据注册中心中的服务名作为路径实现理由规则
          enabled: true
  1. 启动类
java 复制代码
@SpringBootApplication
@EnableDiscoveryClient
public class GatewayStaterApp {
    public static void main(String[] args) {
        SpringApplication.run(GatewayStaterApp.class, args);
    }
}

二、自定义路由配置

yml方式

yml 复制代码
spring:
  cloud:
    gateway:
      routes:
        - predicates:
            - Path=/order/**
          uri: http://localhost:8082/order

Java类方式

java 复制代码
package com.hxd.config;

import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class GatewayRoutesConfig {

    @Bean
    public RouteLocator routeLocator(RouteLocatorBuilder routeLocatorBuilder) {
        return routeLocatorBuilder.routes()
                .route(route ->
                        route.path("/order/**")
                                .uri("lb://order")).build();
    }
}

三、断言

官网提供的断言类型

  1. After:在给定的时间之后
  2. Before:在给定的时间之前
  3. Between:在给定的时间之间,使用逗号隔开
  4. Cookie:cookie中含有该name并且值匹配表达式
  5. Header:Header中包含该key,并且值匹配表达式
  6. Host:匹配host name
  7. Method:匹配请求方法
  8. Paht:匹配给定的请求路径
  9. Query:请求中包含该请求参数
  10. RemoteAddr: 请求的远程地址匹配
  11. Weight:设置权重
  12. XForwardedRemoteAddr: 如果 X-Forwarded-For 头包含,则此路由匹配

四、Filter

Filter是在网关通过断言判断需要转发后,将请求转发给服务前服务返回结果后,增加一些逻辑

Spring Could Gateway自带的Filter

官网Filter

常用Filter

  1. AddRequestHeader
  2. AddRequestParameter
  3. AddResponseHeader
  4. StripPrefix
  5. DefaultFilter 全局过滤器

自定义Filter

自定义filter需要实现两个接口:

  • GlobalFilter
  • Ordered
java 复制代码
package com.hxd.filter;

import com.alibaba.nacos.common.utils.StringUtils;
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.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

@Component
public class ParameterGlobalFilter implements GlobalFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        ServerHttpRequest request = exchange.getRequest();
        String value = request.getQueryParams().getFirst("key");
        if (StringUtils.isEmpty(value)) {
            System.out.println("不符合条件!!");
            // 不符合条件,返回400
            ServerHttpResponse response = exchange.getResponse();
            response.setStatusCode(HttpStatus.BAD_REQUEST);
            return response.setComplete();
        }
        // 符合条件继续放行
        return chain.filter(exchange);
    }

    @Override
    public int getOrder() {
        // 值越小,优先级越高
        return 0;
    }
}
相关推荐
zfoo-framework24 分钟前
帧同步和状态同步
java
charlotte1024102427 分钟前
高并发:关于在等待学校教务系统选课时的碎碎念
java·运维·网络
亓才孓32 分钟前
[JDBC]PreparedStatement替代Statement
java·数据库
_F_y1 小时前
C++重点知识总结
java·jvm·c++
打工的小王1 小时前
Spring Boot(三)Spring Boot整合SpringMVC
java·spring boot·后端
毕设源码-赖学姐1 小时前
【开题答辩全过程】以 高校体育场馆管理系统为例,包含答辩的问题和答案
java·spring boot
我真会写代码1 小时前
SSM(指南一)---Maven项目管理从入门到精通|高质量实操指南
java·spring·tomcat·maven·ssm
vx_Biye_Design1 小时前
【关注可免费领取源码】房屋出租系统的设计与实现--毕设附源码40805
java·spring boot·spring·spring cloud·servlet·eclipse·课程设计
DN金猿1 小时前
接口路径正确,请求接口却提示404
java·tomcat
Maynor9962 小时前
OpenClaw 玩家必备:用 AI 自动追踪社区最新动态
java·服务器·人工智能