• zxb的博客
    • 运维
      • 🧊即插即更:移动硬盘与 U 盘的自动同步方案
      • ⛳FRP穿透个人博客——SSL安全篇
      • 📄Github Action自动化部署Vue3项目
      • 🎲Docker Desktop 代理配置:让镜像拉取更稳更快
      • 🤓FRP穿透搭建个人博客(白嫖SSL版)
      • 🪁FRP穿透搭建个人博客
      • 📄Kubeeasy安装K8s集群(附独家报错解决)
      • 📄不用 Kubernetes,Docker Compose 也能实现零停机蓝绿发布
    • 技术体验
      • 🛡️别再找插件了,美团出品的Tabbit才是真正的AI浏览器
      • 💧GitHub 霸榜!Tabbit平替:给浏览器装上“最强大脑”,这才是真·AI 浏览器插件
    • 自制软件插件
      • 🧋🧧 仪式感拉满!这款开源“年味”小游戏,带你瞬间找回童年快乐!
      • 🕸️摸鱼神器——摸了吗
      • 🔍🚀 思源笔记 S3 插件 v1.0.2 更新:手把手教你配置 PicList 导出
      • 🌊🚀 思源笔记 S3 插件 v1.0.3 更新:一键解锁 BM.md 精美排版!
      • 🥔AE机器人大模型案例
      • Claude Code 终于会"叫"了 —— 一个 10MB 小工具,让 AI 跑完任务发个声
    • 开发小技巧
      • 🪴【保姆级】NAS 骚操作:白嫖百 T 网盘做图床!阿里云/百度秒变“私有云相册”,快到飞起!
    • 后端技术
      • 🚁解决 Spring Session 分布式部署难题:Redis 集成指南
      • 📄使用ThreadLocal实现用户身份认证
      • SpringAI
        • 别再手写 HTTP 客户端调 AI 了!Spring AI 官方出手,一行代码搞定多模型切换
      • 📄使用注解+反射实现自动填充
      • Spring
        • 🔁循环依赖:一个Spring经典坑
        • Spring如何解决依赖循环
        • 🫛什么是Spring Bean
      • Java基础
        • 什么是序列化和反序列化?
        • 📄Java中HashMap的原理
      • 📄分布式系统中的"保险箱":事务Outbox模式深度解析
    • 📑前端技术
      • 🫚axios工具类
      • 🍛Vite项目屏幕适配的两种方案,超详细
      • 📕vue-router小技巧:通过route传参动态设置页面
      • 📄Next.js 中 NEXT_PUBLIC_ 环境变量为何修改后不生效
    • 疑难杂症
      • 🕙SpringWeb报错——CORS问题解决
      • 📄一行 JVM 参数解决 HttpClient 卡死:强制 Java 禁用 IPv6
      • 📄修复github action注入npm包权限问题
zxb的博客疑难杂症

SpringWeb报错——CORS问题解决

访问次数 2651 次创建时间 2026-03-27 11:08

image

SpringWeb报错——CORS问题解决

什么是CORS


CORS称为 跨源资源共享,指的是不同域之前的资源共享

举个例子: http://domain-a.com 使用 axios 向 http://domain-b.com/data.json,这就是一个CORS

什么是CORS问题


出于安全性,浏览器限制脚本内发起的跨源 HTTP 请求。

image

如何解决CORS问题


想要解决CORS可以分为两种思路:

  1. 响应域放行请求域
  2. 请求域代理响应域

响应域放行请求域

  • 如果使用的是Spring Web,因此只需要在配置了添加如下配置:
@Configuration  
public class WebConfig implements WebMvcConfigurer {  

    @Value("${server.baseUrl}")  
    private String url;  

    @Override  
    public void addCorsMappings(CorsRegistry registry) {  
        registry.addMapping("/**")  
                .allowedOrigins(url) // 替换为你的前端地址  
                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")  
                .allowedHeaders("*")  
                .allowCredentials(true);  
    }  

}

如果还是不行请尝试放行OPTIONS,axios会先发送这个请求的

if (Objects.equals(request.getMethod(), "OPTIONS")) return true;
  • 如果使用nginx(不一定成功)

在生产环境中,你可以使用 Nginx 或 Apache 等反向代理服务器来转发请求。这些服务器可以配置为将特定路径的请求转发到后端 API 服务器。 

例如,使用 Nginx,你可以在 nginx.conf 中添加如下配置:

nginxserver {
    listen 80;
    server_name yourdomain.com;

    location /api {
        proxy_pass http://backend-api-server.com;
    }

    location / {
        root /path/to/your/vite/build;
        try_files $uri $uri/ /index.html;
    }
}

在这个配置中,所有以 /api 开头的请求都会被转发到 http://backend-api-server.com,而其他请求则会由 Vite 构建的静态文件提供服务。

请求域代理响应域(临时解决)

这边使用vite+vue3的框架,在 vite.config.js 添加如下:

export default defineConfig({  
  server: {  
      '/api': {  
        target: 'http://localhost:8081/',  
        changeOrigin: true,  
        rewrite: (path) => path.replace(/^\/api/, '')  
      }  
    }  
  }  
})

在 axios 发送请求的话就直接向 /api 发送请求即可

import axios from 'axios';
axios.get('/api')
.then(function (response) {
    // 处理成功情况 
    console.log(response);
})
.catch(function (error) {
    // 处理错误情况 
    console.log(error);
})
.then(function () { 
    // 总是会执行 
});

‍

评论

0 条评论

暂无评论,欢迎第一个留言。

验证码
回复评论
验证码
举报内容
验证码
由 b8l8u8e8 提供支持