直接在网关层做统一鉴权是企业级微服务架构中最主流、最可控的做法,它将认证和权限校验收口集中,避免各服务重复实现、逻辑不一致及漏配风险;Spring Cloud Gateway凭借响应式模型与Sa-Token或JWT集成,支持路由级拦截、用户信息透传与细粒度权限控制,并需配合Redis、白名单、异步非阻塞等生产级安全增强措施。

直接在网关层做统一鉴权,是企业级微服务架构中最主流、最可控的做法。它把认证和权限校验收口到一个地方,避免各服务重复实现、逻辑不一致、漏配风险高。
选型与环境准备
Spring Cloud Gateway 是当前 Java 生态首选——基于 Reactor 的响应式模型,性能好、扩展性强、和 Spring Boot 3.x 天然契合。必须用 Java 17+ 和 Spring Boot 3.3.x(旧版如 Java 8 + Boot 2.x 已不推荐用于新项目)。
- 引入核心依赖:
spring-cloud-starter-gateway+sa-token-reactor-spring-boot-starter(或spring-boot-starter-security+spring-authorization-server,按团队技术栈选) - 注册中心建议用 Nacos 或 Eureka,网关通过
lb://service-name实现负载均衡调用 - 若用 JWT,需在网关解析 token 并校验签名、有效期、签发方;敏感场景建议搭配 Redis 缓存黑名单(如登出 token)
路由配置与请求拦截
路由定义决定“谁来处理”,过滤器决定“能不能进来”。两者配合才能完成完整转发链。
- YAML 中声明路由规则,例如匹配
/api/users/**转发到lb://user-service,并自动剥离前缀 - 编写全局过滤器(
GlobalFilter),对非白名单路径(如/auth/login、/public/**)执行鉴权逻辑 - 过滤器内获取请求头中的
Authorization: Bearer xxx,调用StpUtil.checkLogin()或JwtDecoder解析验证 - 校验通过后,可将用户 ID、角色等信息写入
ServerWebExchange的 attributes 或请求头,供下游服务使用
统一鉴权逻辑落地
鉴权不是只判断“有没有 token”,而是分层控制:先认人,再定权,最后管资源。
立即学习“Java免费学习笔记(深入)”;
- 登录路径放行:用
SaRouter.match("/auth/**", r -> StpUtil.checkLogin())或正则匹配排除 - 模块级权限控制:比如
/user/**需要user:read权限,/admin/**需要role:admin - 支持细粒度注解式控制(如
@SaCheckPermission("order:delete"))但注意——该注解应在业务服务中生效,网关只做粗粒度路由级拦截 - 返回统一错误格式:token 无效返回 401,权限不足返回 403,并附带中文提示(如“无访问用户模块权限”)
安全增强与生产要点
上线前必须补上这几块,否则容易被绕过或拖垮系统。
- 静态资源(
/favicon.ico、/webjars/**)和健康检查端点(/actuator/**)必须加入白名单,避免误拦截 - 开启 CORS 并限制来源域名,禁用
credentials: true时允许泛域名 - 所有鉴权操作必须异步非阻塞,避免 WebFlux 线程被耗尽;Redis 查询要用响应式客户端(如 Lettuce)
- 日志记录关键字段:请求路径、token 前缀、用户 ID(脱敏)、响应状态码,便于审计与排查


















