SpringBoot
1. 添加依赖
<!-- 服务网关依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- nacos服务发现依赖,需要将该服务注册到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>
2. 添加配置信息
spring:
application:
name: Gateway # 注册到 nacos 服务中的名称
cloud:
nacos:
server-addr: localhost:8840 # nacos 服务地址
gateway:
routes:
- id: user-service # 路由标识,保证唯一
uri: "lb://UserService" # 路由的目标地址(lb:(loadBalance)负载均衡,http: )
predicates: # 路由断言,判断请求是否合法
- Path=/user/** # 请求必须满足该请求路径
# filters: # 添加过滤器
# - AddRequestHeader=Key,value # 请求头参数
- id: order-service
uri: "lb://OrderService"
predicates:
- Path=/order/**
# default-filters: # 全服务过滤器
# - AddRequestHeader=Key,value
server:
port: 10010 # 服务的端口号

GlobalFilter
package org.example.gateway.filter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;
import org.springframework.util.MultiValueMap;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
@Order //过滤器优先级([-2147483647,2147483647])从高到低(/实现Ordered接口)
@Component
public class MyGlobalFilter implements GlobalFilter{
/**
*
* @param exchange 请求上下文
* @param chain 过滤器链
* @return
*/
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
//获取请求参数
ServerHttpRequest request = exchange.getRequest();
MultiValueMap<String, String> params = request.getQueryParams();
//获取请求某个参数值
String username = params.getFirst("username");
if("admin".equals(username)){
return chain.filter(exchange); //过滤器放行
}
//设置响应状态码-401
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
return exchange.getResponse().setComplete();
}
}
官方文档