SpringMVC跨域问题解决方案

当Web应用程序尝试从一个源(例如 http://localhost:9090)向另一个不同的源(例如 http://localhost:8080)发起请求时,发现报错:

报错原因:请求被CORS策略拦截了

跨域问题概述

当Web应用程序尝试从一个源(例如 http://localhost:9090)向另一个不同的源(例如 http://localhost:8080)发起请求时,如果这两个源的协议、域名或端口有任何不同,则这种请求被视为跨域请求。浏览器为了安全考虑,会默认阻止这样的请求,除非服务器明确允许。

在之前的项目中,由于前后端代码部署在同一服务下,使用相同的端口号,因此没有遇到跨域问题。然而,在当前的前后端分离架构中,前端运行在一个独立的服务上(如端口9090),而后端API则运行在另一个服务上(如端口8080)。这导致了跨域访问的问题。
SSM 结构中的跨域处理

SSM(Spring + Spring MVC + MyBatis)结构中,Spring MVC框架默认遵循同源策略,不允许跨域请求以增强安全性。这意味着,除非特别配置,否则来自外部的请求将被拒绝。例如,当你正在浏览某个网站时,如果该网站试图向你的银行网站发送请求,这种行为通常会被禁止,除非银行网站明确指定了允许的条件和授权。
解决方案

为了解决跨域问题,可以在后端添加CORS支持,允许特定的来源访问资源。以下是在Spring MVC中启用CORS的一种方法:

  • 创建配置类:在项目的config包内创建一个新的Java类,命名为WebConfig。

  • 编写CORS配置:在WebConfig类中定义一个方法来设置CORS规则,并将其注册到Spring MVC中。

    package cn.tedu.ivos.base.config;

    import org.springframework.context.annotation.Configuration;

    import org.springframework.web.servlet.config.annotation.CorsRegistry;

    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

    /**

    • 跨域处理配置类
    • @version 1.0
    • @date 2024-11-29
      /
      @Configuration
      public class WebConfig implements WebMvcConfigurer {
      @Override
      public void addCorsMappings(CorsRegistry registry) {
      registry.addMapping("/**")
      .allowedHeaders("
      ")
      .allowedMethods("")
      .allowedOriginPatterns("
      ")
      .allowCredentials(true)
      .maxAge(3600);
      }
      }
  • 重启后端工程:保存更改并重启后端应用,确保新的CORS配置生效。

通过上述步骤,你能够为特定的来源(在这个例子中是http://localhost:9090)开启跨域资源共享,从而解决前端与后端之间因端口不同而导致的跨域问题。

相关推荐
程序员小假6 分钟前
说一说 SpringBoot 中 CommandLineRunner
java·后端
sky_ph16 分钟前
JAVA-GC浅析(一)
java·后端
爱coding的橙子17 分钟前
每日算法刷题Day24 6.6:leetcode二分答案2道题,用时1h(下次计时20min没写出来直接看题解,节省时间)
java·算法·leetcode
岁忧22 分钟前
(nice!!!)(LeetCode每日一题)2434. 使用机器人打印字典序最小的字符串(贪心+栈)
java·c++·算法·leetcode·职场和发展·go
天天摸鱼的java工程师31 分钟前
@Autowired 注入失效?
java·后端
sss191s35 分钟前
校招 Java 面试基础题目解析学习指南含新技术实操要点
java·python·面试
编程毕设38 分钟前
【含文档+PPT+源码】基于微信小程序的旅游论坛系统的设计与实现
java·tomcat·旅游
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ40 分钟前
saveOrUpdate 有个缺点,不会把值赋值为null,解决办法
java·开发语言
bytebeats1 小时前
Java 21 虚拟线程 - 兄嘚, 我的锁呢?
java
随缘而动,随遇而安1 小时前
第七十四篇 高并发场景下的Java并发容器:用生活案例讲透技术原理
java·大数据·后端