Gateway 一、Gateway 在微服务中的角色必须理解 本质Gateway 微服务统一入口 安全控制中心 流量调度中心 架构位置客户端 ↓ Nginx静态 反向代理 ↓ Spring Cloud Gateway核心安全层 ↓ 微服务Feign调用 ↓ 数据库 / Redis / MQ Gateway做什么企业真实职责鉴权登录验证风控防刷 / 防攻击限流QPS控制路由转发黑名单日志审计灰度发布 二、Gateway 鉴权JWT体系1️⃣ 登录流程核心用户登录 ↓ 后端生成 JWT ↓ 返回 token ↓ 前端保存 ↓ 每次请求携带 token2️⃣ JWT结构header.payload.signaturepayload 示例{ userId: 1, role: user, exp: 1710000000 }3️⃣ Gateway鉴权流程重点请求进入 Gateway 1️⃣ 判断是否登录接口放行 2️⃣ 获取 token 3️⃣ 解析 JWT 4️⃣ 校验合法性 5️⃣ 写入请求头 userId 6️⃣ 转发到微服务4️⃣ Gateway鉴权代码真实生产版Component public class AuthGlobalFilter implements GlobalFilter { private static final ListString WHITE_LIST Arrays.asList( /auth/login, /auth/register ); Override public MonoVoid filter(ServerWebExchange exchange, GatewayFilterChain chain) { String path exchange.getRequest().getURI().getPath(); // 1️⃣ 白名单放行 if (WHITE_LIST.contains(path)) { return chain.filter(exchange); } // 2️⃣ 获取token String token exchange.getRequest() .getHeaders() .getFirst(Authorization); if (token null) { return unauthorized(exchange); } // 3️⃣ 校验JWT try { Claims claims JwtUtil.parse(token); String userId claims.get(userId).toString(); // 4️⃣ 传递用户信息到下游服务 ServerHttpRequest request exchange.getRequest() .mutate() .header(userId, userId) .build(); return chain.filter(exchange.mutate().request(request).build()); } catch (Exception e) { return unauthorized(exchange); } } private MonoVoid unauthorized(ServerWebExchange exchange) { exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED); return exchange.getResponse().setComplete(); } } 三、风控体系企业核心重点风控 防攻击 防刷 防盗 防爬虫 四、风控四大维度企业标准1️⃣ IP维度风控防攻击场景同一个IP疯狂请求接口规则1分钟最多 100 次请求Redis实现String key ip:limit: ip; Long count redis.incr(key); if (count 1) { redis.expire(key, 60, TimeUnit.SECONDS); } if (count 100) { throw new RuntimeException(IP被限流); }2️⃣ 用户维度风控防刷userId API示例String key user:limit: userId : path; 防止刷单刷接口恶意请求3️⃣ 设备维度风控高级deviceId / fingerprint用途防机器人防脚本攻击4️⃣ 行为风控高级点击频率 / 下单频率 / 请求间隔例子1秒内点击10次 → 判定异常⚠️ 五、防刷系统核心设计1️⃣ 防重复提交必须String key order:submit: userId; Boolean lock redis.setIfAbsent(key, 1, 5, TimeUnit.SECONDS); if (!lock) { throw new RuntimeException(重复提交); }2️⃣ 防重放攻击非常重要攻击方式抓包 → 重放请求 → 重复下单解决方案✔ timestamp noncetimestamp 随机数Redis存nonceString key nonce: nonce; if (redis.hasKey(key)) { throw new RuntimeException(重复请求); } redis.set(key, 1, 10, TimeUnit.MINUTES);3️⃣ 签名机制防参数篡改请求userId1money100signxxx服务端验证String data userId money secret; String sign MD5(data); if (!sign.equals(requestSign)) { throw new RuntimeException(签名错误); } 六、Gateway 风控完整链路重点请求进入 1️⃣ Gateway ↓ 2️⃣ JWT鉴权 ↓ 3️⃣ IP限流 ↓ 4️⃣ 用户限流 ↓ 5️⃣ 黑名单校验 ↓ 6️⃣ 防重放检查 ↓ 7️⃣ 请求头注入 userId ↓ 8️⃣ 转发微服务⛔ 七、黑名单机制企业常用IP / userId → 黑名单示例if (redis.hasKey(black: ip)) { throw new RuntimeException(禁止访问); } 八、企业真实架构重点用户 ↓ Nginx ↓ Gateway鉴权 风控 限流 ↓ Sentinel服务级限流 ↓ Feign调用 ↓ 微服务 ↓ Redis / DB / MQ 九、面试标准回答直接背❓ Gateway作用 答Gateway 是微服务统一入口负责路由转发、鉴权、限流、风控等功能是系统安全和流量控制的第一道防线。❓ 如何做鉴权通过 JWT 方式在 Gateway 中解析 token校验合法性并将用户信息透传到下游服务。❓ 如何做防刷企业级防刷通常采用多维度风控IP限流用户限流设备指纹防重放nonce签名校验Redis计数器限流 十、你这个阶段最重要理解你要记住一句话Gateway 第一道安全防线Sentinel 服务保护Redis 风控核心存储