公司动态

jeecg-boot跨域报错3步解决:从本地跑通到生产加固完整指南

📅 2026/8/31 10:47:06
jeecg-boot跨域报错3步解决:从本地跑通到生产加固完整指南
jeecg-boot跨域报错3步解决从本地跑通到生产加固完整指南【免费下载链接】jeecg-boot【低代码v2.0一句话即可生成整个系统】企业级AI低代码平台一键生成前后端代码甚至整个系统。 AI Skills 一句话画流程、设计表单、生成报表、大屏。内置 AI应用平台涵盖AI聊天、知识库、流程编排、MCP插件等兼容主流大模型。引领AI低代码「Skills 生成 → 在线配置 → 代码生成 → 手工合并-AI修改」开发模式解决 Java 项目 90% 重复工作提高效率又不失灵活。项目地址: https://gitcode.com/GitHub_Trending/je/jeecg-bootjeecg-boot 是企业级 AI 低代码平台前后端分离部署时最容易撞上的坑就是跨域CORS报错。3 步搞定开发环境用 Vite 代理直接绕开生产环境把网关 CORS 收紧成白名单全程不用翻源码。这是 jeecg-boot 低代码平台的前端页面你页面上每次点击按钮向后端发请求跨域问题就发生在这条链路上。场景切入这个报错长什么样先说结论只要你看到下面这段文字就是典型的 jeecg-boot 跨域报错——Access to XMLHttpRequest at http://localhost:8080/jeecg-boot/sys/login from origin http://localhost:3300 has been blocked by CORS policy: No Access-Control-Allow-Origin header is present on the requested resource.触发条件一句话前端跑在 3300 端口后端 API 在 8080 端口浏览器认为这是两个网站直接拦下。注意请求其实已经打到后端了是浏览器不肯把返回数据交给你的页面脚本。原理速读浏览器门卫怎么拦你的请求把浏览器想象成门卫你的网页想跨地址取东西门卫先看服务器回的报文里有没有准入条Access-Control-Allow-Origin响应头上面必须写着允许你来这个域名。没条子东西就算送到了门口门卫也扔进垃圾桶。所以解法只有两条路要么让前后端看起来是同一个地址代理要么让后端把准入条印好CORS 配置。动手改配置先跑通开发环境再收紧生产Step 1开发环境用 Vite 代理跨域直接消失打开前端目录的.env.development确认这两行VITE_PROXY [[/jeecgboot,http://localhost:8080/jeecg-boot]] VITE_GLOB_API_URL/jeecgboot人话翻译前端发出的所有/jeecgboot开头请求由 Vite 开发服务器自己转发到localhost:8080浏览器看到的始终是自己这一个地址。这样做的好处本地开发彻底告别 CORS后端一个头都不用配风险也小这个配置只在开发模式生效不影响线上。Step 2单体部署确认框架自带的 CORS 已生效jeecg-boot 在 WebMvcConfiguration 里预置了跨域过滤器默认全放行corsConfiguration.setAllowCredentials(true); corsConfiguration.addAllowedOriginPattern(*); corsConfiguration.addAllowedHeader(*); corsConfiguration.addAllowedMethod(*);人话翻译允许带 Cookie/token 的请求、放行所有域名、所有请求头、所有 HTTP 方法等于给每个路人都发准入条。这里有个坑这个过滤器带了一个CorsFilterCondition开关——检测到云模式有 Nacos 注册中心配置就自动关闭因为微服务下跨域由网关统一管。所以本地单体跑起来默认就没问题云模式下别在这里找配置去 Step 3。Step 3微服务部署改网关的 application.yml云模式下前端只对接网关这一个入口跨域配置在 jeecg-cloud-gateway 的 application.ymlspring: cloud: gateway: server: webflux: globalcors: cors-configurations: [/**]: allowed-origin-patterns: [*] allowed-methods: [*] allowed-headers: [*]人话翻译网关对/**所有路由统一印准入条下面所有微服务都不用各自配一遍。这样做的好处新增服务零配置风险网关是全流量入口*全放行只能当过渡上线前按下一节的清单收紧。生产加固清单默认全放行是开发便利不是生产方案。上线前逐项打勾源域名白名单allowed-origin-patterns只填你自己的前端域名好处是别的网站借你的接口刷数据也刷不动HTTP 方法白名单只留GET/POST/PUT/DELETE堵住不必要的请求方式请求头白名单只留Content-Type、Authorization等必需头缩小攻击面预检缓存加一行setAllowedMethod之外再配maxAge: 3600yml 里是max-age预检结果缓存 1 小时OPTIONS 请求量砍半带凭证必配 pattern需要 Cookie 时认准allowed-origin-patterns老写法allowed-origins: [*]和凭证是互斥的浏览器会直接拒绝最优解其实是同域Nginx 把前端静态页和/jeecg-boot反代到同一个域名下跨域问题从根上不存在CORS 配置直接省略翻车现场自救三个最高频的坑按现象→原因→解法对号入座现象原因解法预检 OPTIONS 请求返回 401/403页面报错前一步就挂了鉴权拦截器把预检请求也拦了而预检不带登录凭证在 Shiro/鉴权过滤器里放行OPTIONS方法或预检路径域名明明配了*带 Cookie/token 的请求仍被拒allowedOrigin(*)与withCredentials冲突是浏览器强制规则改用allowedOriginPattern并写成具体域名凭证请求即可通过本地开发正常一上线就报跨域本地走 Vite 代理是同域线上前后端分属两个域名代理没了网关/ Nginx 配 CORS或反代成同域部署收尾一句话带走开发期靠 Vite 代理绕开跨域单体靠框架自带过滤器云模式靠网关globalcors上线前把*换成域名、方法、请求头三重白名单带凭证场景认准allowedOriginPattern。细节可对照 CorsFilterCondition 看单体/云模式如何自动切换。改完这三处你的跨域报错就彻底翻篇了 【免费下载链接】jeecg-boot【低代码v2.0一句话即可生成整个系统】企业级AI低代码平台一键生成前后端代码甚至整个系统。 AI Skills 一句话画流程、设计表单、生成报表、大屏。内置 AI应用平台涵盖AI聊天、知识库、流程编排、MCP插件等兼容主流大模型。引领AI低代码「Skills 生成 → 在线配置 → 代码生成 → 手工合并-AI修改」开发模式解决 Java 项目 90% 重复工作提高效率又不失灵活。项目地址: https://gitcode.com/GitHub_Trending/je/jeecg-boot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考