在spring cloud gateway中,应通过自定义globalfilter实现前置全局鉴权,验证不通过立即终止链路并返回结构化json错误响应,确保执行顺序优先且异常兜底,推荐对接spring security webflux统一管理。

在 Spring Cloud Gateway 中,通过自定义 GlobalFilter 实现全局鉴权,是把安全控制前置到系统入口的标准做法。核心不是“拦截后转发”,而是“验证不通过就立即终止链路,并返回规范错误响应”。
用 GlobalFilter 做统一身份校验
GlobalFilter 对所有请求生效,适合承载鉴权这类横切逻辑。关键步骤包括:
- 从
ServerWebExchange.getRequest()提取认证凭据(如Authorization: Bearer xxx或 query 参数token) - 解析并校验 JWT:验签、检查过期时间、验证 issuer/audience 等基础字段
- 校验失败时,直接设置响应状态码(
401 UNAUTHORIZED或403 FORBIDDEN),调用exchange.getResponse().setComplete()终止流程 - 校验成功后,可将用户信息(如 userId、roles)写入请求头或 exchange attributes,供下游服务使用
统一封装错误响应体
避免返回原始异常堆栈或默认 401 页面,应输出结构化 JSON:
- 构造标准格式,例如:
{"code":401,"message":"Invalid token","path":"/api/user"} - 封装工具方法(如
ResponseUtils.writeError(exchange, HttpStatus.UNAUTHORIZED, "xxx")),复用在 Token 过期、签名无效、权限不足等多种场景 - 注意设置响应头:
Content-Type: application/json;charset=UTF-8
确保执行顺序与异常兜底
鉴权必须在路由转发前完成,且不能因内部异常导致 500 泄露:
- 用
@Order(-1)或实现Ordered接口(返回负值),保证过滤器优先执行 - 主动捕获
JwtException、IllegalArgumentException、NullPointerException等运行时异常 - 不在 filter 中抛出未处理异常,防止触发默认错误页面或暴露堆栈信息
进阶建议:对接 Spring Security WebFlux
若项目已引入 Spring Security,更推荐将其作为鉴权主干:
- 用
ReactiveAuthenticationManager承担 Token 解析与认证逻辑 - 通过
ServerAuthenticationConverter从请求中提取凭证 - 配置
ServerAuthenticationEntryPoint和ServerAccessDeniedHandler统一封装未认证/无权限响应 - 天然支持 OAuth2 Resource Server 模式,便于后续接入第三方认证体系
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











