news 2026/5/12 5:37:59

Spring Cloud Gateway实战:微服务API网关从零到一

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Spring Cloud Gateway实战:微服务API网关从零到一

一、核心概念

  • Route(路由):网关的基本构建块,包含 ID、目标 URI、Predicate、Filter
  • Predicate(断言):匹配请求条件(路径、Header、参数等)
  • Filter(过滤器):对请求进行前置/后置处理(鉴权、限流、日志等)

回到顶部

二、快速搭建

<!-- pom.xml --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> # application.yml server: port: 8080 spring: application: name: api-gateway cloud: gateway: routes: - id: user-service uri: lb://user-service predicates: - Path=/api/users/** filters: - StripPrefix=1 - id: order-service uri: lb://order-service predicates: - Path=/api/orders/** filters: - StripPrefix=1 discovery: locator: enabled: true # 自动发现服务

回到顶部

三、自定义全局过滤器(JWT 鉴权)

@Component public class AuthGlobalFilter implements GlobalFilter, Ordered { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { String path = exchange.getRequest().getPath().value(); // 白名单路径跳过鉴权 if (path.startsWith("/api/auth/login") || path.startsWith("/api/auth/register")) { return chain.filter(exchange); } String token = exchange.getRequest() .getHeaders().getFirst("Authorization"); if (token == null || !token.startsWith("Bearer ")) { exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED); return exchange.getResponse().setComplete(); } // 验证 JWT(简化示例) try { String jwt = token.substring(7); Claims claims = Jwts.parser() .setSigningKey("secret-key").parseClaimsJws(jwt).getBody(); String userId = claims.getSubject(); ServerHttpRequest request = exchange.getRequest() .mutate().header("X-User-Id", userId).build(); return chain.filter(exchange.mutate().request(request).build()); } catch (Exception e) { exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED); return exchange.getResponse().setComplete(); } } @Override public int getOrder() { return -100; } }

回到顶部

四、自定义 GatewayFilter(限流)

@Component public class RateLimitFilter implements GatewayFilter, Ordered { private final RateLimiter rateLimiter = RateLimiter.create(100); @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { if (!rateLimiter.tryAcquire()) { exchange.getResponse().setStatusCode(HttpStatus.TOO_MANY_REQUESTS); return exchange.getResponse().setComplete(); } return chain.filter(exchange); } @Override public int getOrder() { return 0; } } # 在路由中使用自定义过滤器 spring.cloud.gateway.routes[0].filters: - name: RateLimit args: redis-rate-limiter.replenishRate: 10 redis-rate-limiter.burstCapacity: 20

回到顶部

五、跨域配置

@Configuration public class CorsConfig { @Bean public CorsWebFilter corsWebFilter() { CorsConfiguration config = new CorsConfiguration(); config.addAllowedOrigin("*"); config.addAllowedHeader("*"); config.addAllowedMethod("*"); config.setAllowCredentials(true); UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); source.registerCorsConfiguration("/**", config); return new CorsWebFilter(source); } }

回到顶部

六、网关 vs Nginx

# Nginx:反向代理 + 负载均衡 # 适合:静态资源、SSL 终止、四层/七层负载均衡 # Spring Cloud Gateway:业务网关 # 适合:动态路由、JWT 鉴权、限流、熔断、灰度发布 # 生产推荐:Nginx(前置)+ Gateway(后置) # 请求链路:Client → Nginx → Gateway → Microservice
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/7 4:27:43

排序算法指南:归并排序

前言&#xff1a;归并排序的核心思想是利用分治法&#xff08;Divide and Conquer&#xff09;策略&#xff0c;它将一个大的问题分解成小的、容易解决的子问题&#xff0c;然后将子问题的解合并起来&#xff0c;从而得到原问题的解。一、归并排序的核心思想分&#xff08;Divi…

作者头像 李华
网站建设 2026/4/14 18:18:59

跨平台B站资源管理工具:三步掌握高效管理视频与番剧的秘诀

跨平台B站资源管理工具&#xff1a;三步掌握高效管理视频与番剧的秘诀 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

作者头像 李华
网站建设 2026/4/14 0:35:12

ClearerVoice-Studio效果展示:VAD预处理对长静音段语音增强的增益分析

ClearerVoice-Studio效果展示&#xff1a;VAD预处理对长静音段语音增强的增益分析 1. 引言 你有没有遇到过这种情况&#xff1f;在听一段会议录音或者采访音频时&#xff0c;中间有长达几十秒甚至几分钟的空白&#xff0c;但背景里一直有嗡嗡的空调声或者轻微的电流声。这些静…

作者头像 李华
网站建设 2026/4/17 15:53:58

Wan2.2-I2V-A14BGPU算力优化:显存调度策略降低OOM风险实测

Wan2.2-I2V-A14BGPU算力优化&#xff1a;显存调度策略降低OOM风险实测 1. 引言&#xff1a;文生视频模型的显存挑战 在当今视频内容创作领域&#xff0c;文生视频模型正成为创作者的重要工具。Wan2.2-I2V-A14B作为一款高性能文生视频模型&#xff0c;能够根据文本描述生成高质…

作者头像 李华
网站建设 2026/4/17 21:43:13

网络安全已从单点技术对抗演变多维复杂博弈

网络安全已从单点技术对抗演变多维复杂博弈 AI代理被劫持攻击&#xff08;Google DeepMind研究&#xff09; 该研究首次系统性揭示“AI Agent Traps&#xff08;AI代理陷阱&#xff09;”攻击模型&#xff0c;攻击者通过构造恶意网页内容诱导AI代理执行隐藏指令。例如在HTML注…

作者头像 李华