spring cloud gateway 的标准代码
-----------------------------------------------------------------------------------------------------
spring cloud gateway 的标准代码
Spring Cloud Gateway 标准完整代码(生产可直接用)
我给你整理最规范、最通用、企业级的 Spring Cloud Gateway 全套代码,包含:
- 网关启动类
- 全局 Token 校验过滤器(核心)
- 白名单配置类
- 跨域配置
- application.yml 标准配置
- 依赖 pom.xml
一、pom.xml 核心依赖
xml
<dependencies>
<!-- Spring Cloud Gateway 网关核心 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- 配置自动绑定 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!-- Lombok 简化代码 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- JWT 工具(可选,用于Token校验) -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.9.1</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.9.1</version>
<scope>runtime</scope>
</dependency>
</dependencies>
二、启动类(GatewayApplication)
java
运行
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
/**
* 网关启动类
*/
@SpringBootApplication
@EnableConfigurationProperties // 开启配置绑定
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
}
}
三、白名单配置类(WhiteListConfig)
java
运行
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Token + 白名单配置
* 读取 yml 中 token 前缀的配置
*/
@Component
@Data
@ConfigurationProperties(prefix = "token")
public class WhiteListConfig {
// 服务级动态白名单:key=服务名,value=接口列表
private Map<String, List<String>> whiteList = new HashMap<>();
// Token 所在请求头(如 Authorization)
private String header;
// JWT 公钥
private String publicKey;
// 时间偏移量(解决服务器时间差)
private long allowedClockSkewInSeconds;
// 全局静态白名单
private List<String> staticWhiteList = new ArrayList<>();
}
四、全局 Token 校验过滤器(TokenFilter)【核心】
java
运行
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.core.io.buffer.DataBuffer;
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.Flux;
import reactor.core.publisher.Mono;
import java.util.HashMap;
import java.util.Map;
/**
* 全局 Token 校验过滤器
* 所有请求优先校验 Token
*/
@Component
@Slf4j
public class TokenFilter implements GlobalFilter, Ordered {
@Autowired
private WhiteListConfig whiteListConfig;
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest request = exchange.getRequest();
String path = request.getPath().value();
// 1. 白名单直接放行
if (isWhiteList(path)) {
log.info("白名单放行:{}", path);
return chain.filter(exchange);
}
// 2. 获取 Token
String token = request.getHeaders().getFirst(whiteListConfig.getHeader());
if (token == null || token.isEmpty()) {
return unauthorized