|
|
|
@ -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;
|
|
|
|
|
}
|
|
|
|
|
}
|