在网关层通过自定义globalfilter实现统一鉴权与异常响应封装:1.提取并校验token,失败则写入标准json错误体返回401/403;2.封装responseutils工具复用;3.用@order(-1)确保执行顺序,捕获jwtexception等防止500泄露;4.推荐集成spring security webflux流程以提升规范性与扩展性。

在网关层(如 Spring Cloud Gateway)通过自定义 GlobalFilter 拦截鉴权失败请求,并统一封装异常响应,是保障 API 安全与体验的关键做法。核心思路是:在过滤器中检查认证信息(如 JWT、Token),验证不通过时直接终止链路,构造统一格式的错误响应(如 JSON),避免下游服务暴露内部异常或重复鉴权逻辑。
1. 编写全局鉴权过滤器
实现 GlobalFilter 接口,重写 filter 方法,在请求转发前完成校验:
- 从
ServerHttpRequest中提取 Authorization 头或自定义 Token 参数 - 解析并校验 Token(如使用
JwtDecoder验签、过期、权限等) - 校验失败时,调用
ServerWebExchange.getResponse().writeWith(...)写入统一错误体,返回 401 或 403 状态码 - 校验成功则调用
chain.filter(exchange)放行
2. 统一封装异常响应体
避免直接返回原始异常堆栈,应构造标准 JSON 格式,例如:
{
"code": 401,
"message": "Token expired or invalid",
"timestamp": "2024-04-10T10:20:30Z",
"path": "/api/order/list"
}
建议封装为工具方法(如 ResponseUtils.writeError(exchange, HttpStatus.UNAUTHORIZED, "xxx")),复用在各类拦截场景中。
3. 注意顺序与异常穿透
GlobalFilter 默认无序,需用 @Order 注解确保鉴权过滤器早于路由转发执行(如 @Order(-1));同时要捕获 Token 解析过程中的运行时异常(如 JwtException、IllegalArgumentException),防止未处理异常导致 500 响应泄露细节。
4. 可选:集成到 Security WebFlux 流程
若项目已引入 Spring Security,更推荐将鉴权逻辑交由 SecurityWebFilterChain 管理,通过自定义 ReactiveAuthenticationManager 和 ServerAuthenticationConverter 实现统一认证,再配合 ServerAccessDeniedHandler 和 ServerAuthenticationEntryPoint 统一封装拒绝/未认证响应——这种方式更规范、可扩展性更强,且天然支持 OAuth2、JWT 等标准流程。










