springboot gateway
一、部署
1、创建springboot项目
2、添加maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
<version>4.3.0</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2023.0.3.3</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2023.0.3.3</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
<version>4.1.0</version>
</dependency>
3、yml配置
spring:
config:
import:
- nacos:test_yaml
- nacos:test_gateway
- nacos:test_group?group=group1
application:
name: ms-gateway-service
cloud:
nacos:
discovery:
server-addr: 192.168.244.131:8848
config:
server-addr: 192.168.244.131:8848
file-extension: yamlgateway配置,路由
spring:
cloud:
gateway:
server:
webflux:
routes:
- id: mstickservice #路由规则id,自定义,唯一
uri: lb://mstickservice #路由目标的微服务,lb代表负载均衡
predicates: #路由断言,判断请求是否符合规则,符合则路由到目标
- Path= /testaa/** #以请求路径做判断,以/user开头的符合
discovery:
locator:
enabled: true二、gateway配置
1.路由配置 (spring.cloud.gateway.routes)
spring:
cloud:
gateway:
routes:
- id: users-route
uri: lb://user-service # 使用服务发现
predicates:
- Path=/users/**
filters:
- AddRequestHeader=X-Request-Frontend-Id, Gateway路由是网关的基础,定义了HTTP请求如何从网关转发到后端服务。基本结构包含:
2. 负载均衡配置
3. 全局过滤器配置
可以在全局级别定义过滤器,应用于所有路由:
spring:
cloud:
gateway:
default-filters:
- AddResponseHeader=X-Response-Default, Default-Value3.1、例子:
1.gateway yml配置
spring:
cloud:
gateway:
server:
webflux:
default-filters:
- AddRequestHeader=name,zhangsan
routes:
- id: mstickservice #路由规则id,自定义,唯一
uri: lb://mstickservice #路由目标的微服务,lb代表负载均衡
predicates: #路由断言,判断请求是否符合规则,符合则路由到目标
- Path= /testaa/** #以请求路径做判断,以/user开头的符合
- id: mstickservice2
uri: lb://mstickservice
predicates:
- Path= /testbb/**
discovery:
locator:
enabled: true2.mstickservice服务接口
@RestController
@RequestMapping("testbb")
public class TestBBController {
@RequestMapping("tfilter")
@ResponseBody
public String tfilter(@RequestHeader(value = "name", required = false) String name) {
System.out.println("name====>" +name);
return name;
}
}
3. 访问:http://localhost:9090/testbb/tfilter
3.2、自定义全局过滤器
实现GlobalFilter接口的filter方法
@Component public class MyGlobalFilter implements GlobalFilter,Ordered { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { ServerHttpRequest request = exchange.getRequest(); URI uri = request.getURI(); System.out.println("请求的uri=========>"+uri); //过滤器的业务处理 System.out.println("执行了业务处理"); //放行 return chain.filter(exchange); } //过滤器执行顺序,数值越小,优先级越高 @Override public int getOrder() { return 0; } }
访问:http://localhost:9090/testbb/tfilter 可以看到自定义的全局过滤器已经被执行了。
4. 跨域配置 (spring.cloud.gateway.globalcors.cors-configurations)
定义跨域资源共享(CORS)策略:
spring:
cloud:
gateway:
globalcors:
cors-configurations:
'[/**]':
allowedOrigins: "*"
allowedMethods: "*"5. 认证与鉴权
虽然不是直接的配置项,但可以通过配置过滤器(如JWT、OAuth2等)实现认证和授权逻辑。
6. 日志与跟踪
配置日志级别和追踪信息,例如使用logging.level.org.springframework.cloud.gateway=DEBUG来查看更详细的调试信息。
7. 性能与限制
可以配置请求速率限制、连接池大小等来优化性能和保护后端服务:
spring:
cloud:
gateway:
request-predicates:
- name: RequestRateLimiter
args:
redis-rate-limiter.replenishRate: 10
redis-rate-limiter.burstCapacity: 208. SSL/TLS配置
配置SSL证书以支持HTTPS通信,这通常涉及到服务器的SSL/TLS设置而非直接在网关配置中设置,但可以通过环境变量或应用属性间接影响。
9.局部过滤器
9.1、简单的在yml配置文件种进行实现
spring:
cloud:
gateway:
server:
webflux:
default-filters:
- AddRequestHeader=name,zhangsan
routes:
- id: mstickservice3
uri: lb://mstickservice
predicates:
- Path= /testcc/**
filters:
- AddRequestHeader=name2,lisi9.2、继承AbstractGatewayFilterFactory类,并重写GatewayFilter方法:
局部过滤器:局部过滤器仅应用于特定的路由规则。你可以使用GatewayFilterFactory接口和它的子类来实现局部过滤器
//固定的GatewayFilterFactory类名后缀,方便配置使用 //局部的过滤器配置完不能立即生效,还要再yml配置文件种添加filters过滤参数 //这个参数为TicketGatewayFilterFactory类名的前一部分:Ticket @Component public class TicketGatewayFilterFactory extends AbstractGatewayFilterFactory<Object> { @Override public GatewayFilter apply(Object config) { return new OrderedGatewayFilter((exchange, chain) -> { ServerHttpRequest request = exchange.getRequest(); URI uri = request.getURI(); System.out.println(" 路径为" + uri); System.out.println(" ticket模块的局部过滤器"); return chain.filter(exchange); }, 2); } }
spring:
cloud:
gateway:
server:
webflux:
default-filters:
- AddRequestHeader=name,zhangsan
routes:
- id: mstickservice3
uri: lb://mstickservice
predicates:
- Path= /testcc/**
filters:
- Ticket整理自:https://developer.aliyun.com/article/1505723
https://blog.csdn.net/2301_78646673/article/details/134477364



浙公网安备 33010602011771号