From 14cecf1f57f3177a3ffe67bde07269156f63c16d Mon Sep 17 00:00:00 2001 From: lzy <1768422698@qq.com> Date: Tue, 17 Dec 2024 00:20:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../security/common/config/CorsConfig.java | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 yami-shop-security/yami-shop-security-common/src/main/java/com/yami/shop/security/common/config/CorsConfig.java diff --git a/yami-shop-security/yami-shop-security-common/src/main/java/com/yami/shop/security/common/config/CorsConfig.java b/yami-shop-security/yami-shop-security-common/src/main/java/com/yami/shop/security/common/config/CorsConfig.java new file mode 100644 index 0000000..317b7fd --- /dev/null +++ b/yami-shop-security/yami-shop-security-common/src/main/java/com/yami/shop/security/common/config/CorsConfig.java @@ -0,0 +1,61 @@ +package com.yami.shop.security.common.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.CorsConfigurationSource; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; + +/** + * CorsConfig类是一个Spring的配置类(通过@Configuration注解标识), + * 其主要作用是配置跨域资源共享(CORS)相关的设置,以便在前后端分离的项目中, + * 解决浏览器的同源策略限制,使得不同域名(或端口等不同源情况)下的前端应用能够安全地访问后端接口。 + * + * @author yami + */ +@Configuration +public class CorsConfig { + + /** + * corsConfigurationSource方法是一个Spring的Bean定义方法(通过@Bean注解标识), + * 用于创建并配置一个CorsConfigurationSource对象,该对象作为Spring Web中CORS配置的数据源, + * 定义了哪些来源(origins)的请求可以访问本应用的接口、允许的HTTP方法、请求头以及其他相关的跨域设置等信息。 + * + * 注意事项: + * - 对于生产环境,建议将配置中的通配符(*)修改为实际需要允许跨域访问的具体域名, + * 虽然通配符可以方便开发测试阶段允许所有来源访问,但在生产环境出于安全考虑,应精确配置。 + * - 可以通过多次调用addAllowedOrigin等方法配置多个允许跨域访问的域名,例如: + * configuration.addAllowedOrigin("http://localhost:8080"); + * configuration.addAllowedOrigin("http://192.168.1.6:8080"); + * + * @return 返回配置好的CorsConfigurationSource对象,供Spring Web在处理跨域请求时使用其配置信息。 + */ + @Bean + public CorsConfigurationSource corsConfigurationSource() { + // 创建一个CorsConfiguration对象,用于配置跨域相关的各种规则 + CorsConfiguration configuration = new CorsConfiguration(); + // 使用addAllowedOriginPattern方法添加允许跨域访问的来源模式,这里使用通配符(*)表示允许所有来源访问, + // 但需注意在生产环境应按实际情况修改为具体域名,可参考上面的注释说明。 + configuration.addAllowedOriginPattern("*"); + // 修改为添加(add)而不是设置(set)允许的HTTP方法,使用通配符(*)表示允许所有的HTTP方法(如GET、POST、PUT等), + // 这样前端可以使用各种类型的HTTP请求来访问后端接口。 + configuration.addAllowedMethod("*"); + // 这里配置允许的请求头,同样使用通配符(*)表示允许所有的请求头信息, + // 特别重要的是起码需要允许 Access-Control-Allow-Origin这个请求头,它与跨域访问的合法性验证密切相关。 + configuration.addAllowedHeader("*"); + // 设置是否允许发送Cookie等凭证信息,设置为true表示允许, + // 若前后端交互需要携带用户认证等相关凭证(如Cookie中的登录信息),则需要开启此项。 + configuration.setAllowCredentials(true); + // 设置预检请求(OPTIONS请求)的缓存时间,单位为秒,这里设置为一天(3600 * 24秒), + // 在缓存有效期内,对于相同来源、方法和请求头的请求,浏览器不会再次发送预检请求,提高性能。 + configuration.setMaxAge(3600 * 24L); + + // 创建一个基于URL的CorsConfigurationSource对象,它可以根据不同的URL路径应用不同的CorsConfiguration配置。 + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + // 将上面配置好的CorsConfiguration应用到所有路径(/**表示匹配所有的请求路径), + // 意味着所有的接口请求都会按照这个配置来处理跨域相关的规则。 + source.registerCorsConfiguration("/**", configuration); + + return source; + } +} \ No newline at end of file