前端不参与token校验,网关通过globalfilter统一非阻塞校验jwt并透传用户信息至下游;websocket需自定义route级过滤器显式绑定,query传token更可靠。

前端本身不参与网关的令牌校验流程,所谓“前端网关集中过滤器”这个说法存在概念混淆。真正的令牌校验必须由后端网关(如 Spring Cloud Gateway)完成,前端只负责携带 Token(如放在 Authorization 头或 query 参数中)。网关通过过滤器链天然支持高并发请求的一次性、统一校验,无需前端做任何“流程控制”配合。
网关层统一校验的核心机制
所有 HTTP 请求(无论并发多少)都会按顺序进入网关的过滤器链,GlobalFilter 是实现一次性校验的关键:
- 定义一个实现 GlobalFilter 和 Ordered 的类,getOrder() 返回较小值(如 -100),确保它在路由转发前最先执行
- 从 ServerWebExchange 中提取 Authorization 头或自定义 token 参数
- 非阻塞地校验 Token:调用 Redis 响应式判断是否存在有效 key,或用 JwtDecoder 验签+过期时间检查
- 失败时直接设置 401 状态码并调用 response.setComplete() 终止链路;成功则调用 chain.filter(exchange) 放行
- 登录等白名单路径(如 /login)需硬编码跳过校验,避免死循环
WebSocket 场景要单独处理
WebSocket 握手请求(ws:// 或 wss://)不会走 GlobalFilter,因为 WebsocketRoutingFilter(order = -1)会提前接管。必须改用 Route 级 GatewayFilter:
PigX UI Pro 前端开发指南 - Vue 3 + TypeScript + Element Plus。当用户提到 PigX UI、PigX 前端、lgb-mgui 项目、Vue 3 企业级后台开发、Element Plus 后台开发时使用此技能。
- 实现继承 AbstractGatewayFilterFactory 的过滤器(如 AuthWebSocketFilter)
- 在 application.yml 的路由配置中显式绑定,且 order 设为 -2,确保在 WebsocketRoutingFilter 之前执行
- 推荐前端通过 query 传 token(如 ws://gateway/ws?token=xxx),比 Header 更可靠
- 校验失败立即返回 401 并 return Mono.empty(),阻止握手升级
校验后必须透传用户上下文
只校验 Token 不够,下游服务需要知道“谁在访问”。校验通过后应把解析出的信息注入请求头:
- 用 AppJwtUtil.getClaimsBody(token) 解析 JWT payload,获取 userId、roles 等字段
- 构造新请求对象:request.mutate().header("X-User-Id", userId).header("X-User-Roles", roles).build()
- 再调用 exchange.mutate().request(mutatedRequest).build() 继续链路
- 下游微服务即可从 header 中安全读取身份信息,无需重复鉴权
异常响应要统一封装
避免直接抛异常导致 500 泄露内部细节,应在过滤器中主动写标准错误体:
- 封装工具类 ResponseUtils.writeError(exchange, HttpStatus.UNAUTHORIZED, "Token expired")
- 返回 JSON 格式,包含 code、message、timestamp、path 字段
- 捕获 JwtException、SignatureException 等特定异常,防止未处理异常中断过滤器链
- 建议集成 Spring Security WebFlux 流程,提升规范性和后续扩展能力
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










