当前位置: 首页 > news >正文

贵阳网站建设建站系统长沙seo网站优化公司

贵阳网站建设建站系统,长沙seo网站优化公司,临沭有做网站的吗,cad如何做图纸模板下载网站在Spring Boot中,跨域是指当浏览器中的前端应用(如运行在某个域名和端口下的前端页面)请求后端接口时,如果后端接口所在的域名、端口或协议与前端应用不一致,浏览器会阻止这种跨域请求。这是由于浏览器的同源策略&…

在Spring Boot中,跨域是指当浏览器中的前端应用(如运行在某个域名和端口下的前端页面)请求后端接口时,如果后端接口所在的域名、端口或协议与前端应用不一致,浏览器会阻止这种跨域请求。这是由于浏览器的同源策略(Same-Origin Policy)所导致的。

跨域产生的原因

浏览器出于安全性考虑,会阻止不同来源(域名、端口或协议不同)之间的请求

  • 同源策略限制:浏览器出于安全考虑,实施了同源策略,即只允许页面请求同源(相同协议、域名和端口)的资源。当JavaScript发起的请求跨越了同源策略,即请求的目标与当前页面的域名、端口、协议不一致时,浏览器会阻止请求的发送或接收。

  • 前后端分离架构:在现代的前后端分离开发模式下,前端和后端通常部署在不同的服务器上,具有不同的域名或端口,这很容易导致跨域问题。

例如:

  • 前端运行在 http://localhost:3000
  • 后端 API 在 http://localhost:8080

当前端向 http://localhost:8080/api/data 发送请求时,浏览器会拦截并报 CORS policy 错误。

解决跨域问题的常见方式

方式 1:使用 @CrossOrigin 注解(推荐小型项目或单个接口)

在 Spring Boot 控制器(@RestController)上使用 @CrossOrigin 注解,允许跨域访问:

1) 允许所有来源访问整个控制器
@RestController
@RequestMapping("/api")
@CrossOrigin(origins = "*")  // 允许所有来源
public class MyController {@GetMapping("/data")public String getData() {return "Hello, CORS!";}
}
2) 只允许特定的来源
@CrossOrigin(origins = "http://localhost:3000") // 只允许从 http://localhost:3000 访问
@GetMapping("/data")
public String getData() {return "Hello, CORS!";
}
3) 细粒度控制(支持多个来源、方法、请求头)
@CrossOrigin(origins = {"http://localhost:3000", "http://example.com"},methods = {RequestMethod.GET, RequestMethod.POST},allowedHeaders = {"Content-Type", "Authorization"})
@GetMapping("/data")
public String getData() {return "CORS Configured!";
}

方式 2:全局配置(推荐大型项目或所有接口都需要跨域)

如果所有 API 都需要支持跨域,使用 CorsFilterWebMvcConfigurer 进行全局配置。

2.1) 使用 WebMvcConfigurer 配置全局 CORS,@Configuration 类中注册 CORS 规则:
  • 在Spring Boot应用中,可以通过创建一个配置类,实现WebMvcConfigurer接口,并重写addCorsMappings方法来全局配置跨域访问。这种方式适用于所有接口都需要跨域访问的场景。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class CorsConfig {@Beanpublic WebMvcConfigurer corsConfigurer() {return new WebMvcConfigurer() {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**") // 允许所有路径.allowedOrigins("http://localhost:3000") // 允许特定域访问.allowedMethods("GET", "POST", "PUT", "DELETE") // 允许的请求方法.allowedHeaders("*") // 允许所有请求头.allowCredentials(true); // 允许携带 Cookie}};}
}
  • addMapping("/**"):允许所有接口跨域
  • allowedOrigins("http://localhost:3000"):只允许 http://localhost:3000 访问
  • allowedMethods("GET", "POST", "PUT", "DELETE"):允许这些 HTTP 方法
  • allowedHeaders("*"):允许所有请求头
  • allowCredentials(true):允许携带 cookiesAuthorization

2.2) 使用 CorsFilter 配置 CORS

另一种方式是使用 CorsFilter,这种方式也是通过Java配置的方式配置跨域访问,与全局配置CORS类似,但实现方式略有不同。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;import java.util.Arrays;@Configuration
public class MyCorsFilter {@Beanpublic CorsFilter corsFilter() {UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();CorsConfiguration config = new CorsConfiguration();config.setAllowedOrigins(Arrays.asList("http://localhost:3000")); // 允许的前端地址config.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE"));config.setAllowedHeaders(Arrays.asList("*"));config.setAllowCredentials(true); // 允许 Cookiesource.registerCorsConfiguration("/**", config);return new CorsFilter(source);}
}
  • setAllowedOrigins(Arrays.asList("http://localhost:3000")):指定允许的域
  • setAllowCredentials(true):允许带 Cookies(必须与 allowedOrigins 不能设置为 "*"

方式3. 允许携带 Cookie

如果前端需要携带 cookieAuthorization 头,例如 fetchAxios 发送请求时 credentials: 'include',你需要:

  1. 在后端 allowCredentials(true)
  2. 在前端请求时 credentials: 'include'

后端

registry.addMapping("/**").allowedOrigins("http://localhost:3000").allowedMethods("GET", "POST").allowCredentials(true);  // 允许携带 Cookie

前端(使用 Fetch)

fetch('http://localhost:8080/api/data', {method: 'GET',credentials: 'include' // 允许携带 Cookie
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error(error));

前端(使用 Axios)

axios.get('http://localhost:8080/api/data', { withCredentials: true }).then(response => console.log(response.data)).catch(error => console.error(error));

方式4. 通过Nginx配置CORS

如果项目中使用了Nginx作为反向代理服务器,也可以在Nginx中配置CORS来解决跨域问题。

server {...location / {add_header 'Access-Control-Allow-Origin' '*';add_header 'Access-Control-Allow-Headers' '*';add_header 'Access-Control-Allow-Methods' '*';if ($request_method = 'OPTIONS') {return 204;}}...
}

通过以上方法,可以在Spring Boot应用中有效地解决跨域问题,确保前后端之间的正常通信。

常见 CORS 错误及解决方法

错误信息可能原因解决方案
Access to fetch at 'http://localhost:8080' from origin 'http://localhost:3000' has been blocked by CORS policy后端未配置 CORS配置 @CrossOriginWebMvcConfigurer
Response to preflight request doesn’t pass access control checkOPTIONS 请求被拦截在后端允许 OPTIONS 方法
Missing Allow-Control-Allow-Origin headerCORS 头未返回确保后端 allowedOrigins 设置正确
credentials mode is 'include' but Access-Control-Allow-Credentials is missing需要携带 Cookie 但未允许在后端 allowCredentials(true)

总结

方法适用场景配置方式
@CrossOrigin适用于单个接口@RestController 或方法级别使用
WebMvcConfigurer适用于整个项目CorsRegistry 配置
CorsFilter高级定制使用 CorsConfiguration

在 Spring Boot 项目中,推荐使用 WebMvcConfigurer 进行全局跨域配置,@CrossOrigin 适用于局部控制。

http://www.cadmedia.cn/news/9789.html

相关文章:

  • 宁波网站建设方案咨询免费域名注册平台
  • 网站建设的定位是什么火爆产品的推广文案
  • 网站建设优化话术重庆网站推广
  • 网站海外推广谷歌seo方案武汉久都seo
  • 建设l旅游网站目的及功能定位网上怎么找人去推广广告
  • 网站备案号信息上海抖音seo公司
  • 空间设计网站百度官网优化
  • 河南五建建设集团有限公司网站网络宣传方式
  • 本地环境建设网站怎么样建网站
  • 网站建设w亿玛酷1负责教育机构加盟
  • 销售型网站的建设流程及特点微指数官网
  • 怎么把淘宝店放到自己做的网站去百度网页排名怎么提升
  • 昆山网站优化公司seo系统源码出售
  • 呼和浩特网站优化公司怎么给客户推广自己的产品
  • 全景网站制作教程新网站百度收录
  • 企业网站建设哪家公司好佛山做优化的网络公司
  • 河北提供网站建设公司哪家好seo和sem的联系
  • 十堰做网站的有哪些做企业推广
  • 商水住房城乡建设网站河北seo推广方案
  • 上海公司建设网站网站建设一般多少钱
  • 网站建设需求文件引流推广营销
  • 小广告公司如何起步韶山seo快速排名
  • google免费vps枣庄网站seo
  • 网络技术包括哪些具体内容seo公司 彼亿营销
  • wordpress 子类seo营销培训
  • 建网站需要什么软件微信引流推广精准粉
  • 在线ps手机版网页版seo软文是什么意思
  • 乐陵森源木业全屋定制湖南网站seo推广
  • app store软件下载百家号优化
  • 简单网页制作模板下载长沙网站搭建优化