使用Gateway + Sa-token跨域问题解决
问题背景
我的项目是Boot项目改造成的微服务项目,请求流程是,前端发送请求到网关,网关再路由到其他服务。所以我将其他服务的跨域配置删除,在网关中进行跨域配置。也是踩了一会坑。
解决
增加加全局 WebFilter 强制加 CORS 头
▼java复制代码@Component @Order(Ordered.HIGHEST_PRECEDENCE) public class CorsResponseHeaderFilter implements WebFilter { @Override public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) { ServerHttpResponse response = exchange.getResponse(); response.getHeaders().set("Access-Control-Allow-Origin", "http://localhost:xxxx"); response.getHeaders().set("Access-Control-Allow-Credentials", "true"); response.getHeaders().set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, PATCH"); response.getHeaders().set("Access-Control-Allow-Headers", "Content-Type,Authorization,X-Requested-With,Accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers"); return chain.filter(exchange); } }
放行OPTIONS请求
▼java复制代码/** * [Sa-Token 权限认证] 配置类 * * @author mi */ @Configuration public class SaTokenConfigure { // 注册 Sa-Token全局过滤器 @Bean public SaReactorFilter getSaReactorFilter() { return new SaReactorFilter() // 拦截地址 .addInclude("/**") /* 拦截全部path */ // 开放地址 .setExcludeList(WITH_PATH) // 鉴权方法:每次访问进入 .setAuth(obj -> { // 更多匹配 ... */ }).setBeforeAuth(o -> { // 跨域支持 放行OPTIONS SaRouter.match(SaHttpMethod.OPTIONS) .back(); }) .setError(e -> SaResult.error(e.getMessage())); } }
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
作者分享
大家vb codiing用的是那家的,现在感觉都很贵啊,有没有省经济流打法[叹气]
2
2025 年终小结一下
3
如何在Gateway 集成 Knife4j 进行接口文档聚合
3
最近在看AI智能体项目,分享一下Docker 一键安装PGSQL + PGVector。
你需要修改命令中you-password,you-db ,you-name
命令:
docker run -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD='you-password' -e POSTGRES_DB=you-db --name you-name -p 5432:5432 -d ankane/pgvector
6
Nexus Maven私服部署与使用
3
