ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

阿里云服务器跨域问题解决方案

2026/9/17 10:12:33 拓冰建站 浏览量
阿里云服务器跨域问题解决方案

首先看一下原始代码:

@Bean
public CorsFilter corsFilter() {UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();CorsConfiguration corsConfiguration = new CorsConfiguration();corsConfiguration.addAllowedOrigin("http://47.99.63.22/vue"); corsConfiguration.addAllowedOrigin("http://47.99.63.22/lab");corsConfiguration.addAllowedOrigin("http://47.99.63.22:8096/schedule/all"); corsConfiguration.addAllowedOrigin("http://47.99.63.22:8096/*"); corsConfiguration.addAllowedOrigin("http://localhost:5173"); corsConfiguration.addAllowedOrigin("http://localhost:5174"); corsConfiguration.setAllowCredentials(true);corsConfiguration.addAllowedHeader("*"); corsConfiguration.addAllowedMethod("*"); corsConfiguration.setMaxAge(MAX_AGE);source.registerCorsConfiguration("/**", corsConfiguration); UrlBasedCorsConfigurationSource corsConfigurationSource = new UrlBasedCorsConfigurationSource();corsConfigurationSource.registerCorsConfiguration("/**",corsConfiguration);return new CorsFilter(source);
}

可能存在以下问题:

1、不正确的allowedOrigins配置

addAllowedOrigin方法应该只包含协议、域名和端口。您不能在这里指定路径(如`/lab`或`/schedule/all`)。正确的做法是只指定到端口号,例如 `http://47.99.63.22:8096`。如果您的前端服务器运行在不同的端口上,则只需指定协议和域名(没有路径或通配符):

2、精确的源而不是通配符

 在配置CORS时,如果`setAllowCredentials`被设置为`true`(意味着你希望支持凭证),则不能使用通配符`*`来设置`allowedOrigins`。凭证包括cookies以及HTTP认证的相关信息。通配符与允许凭证的请求不兼容。 

3、注册的顺序和实例化

您似乎创建了两个UrlBasedCorsConfigurationSource实例,但只有`source`被用于创建`CorsFilter`。请确保您使用了正确的实例化对象。在这段代码中,`corsConfigurationSource` 实例是没必要的。 

修正上述问题后的示例代码可能如下所示:

@Bean
public CorsFilter corsFilter() {UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();CorsConfiguration corsConfiguration = new CorsConfiguration();corsConfiguration.addAllowedOrigin("http://47.99.63.22"); // 注意这里去掉了路径和通配符corsConfiguration.addAllowedOrigin("http://localhost:5173");corsConfiguration.addAllowedOrigin("http://localhost:5174");corsConfiguration.setAllowCredentials(true);corsConfiguration.addAllowedHeader("*");corsConfiguration.addAllowedMethod("*");corsConfiguration.setMaxAge(MAX_AGE);source.registerCorsConfiguration("/**", corsConfiguration);return new CorsFilter(source);
}

 确保增加MAX_AGE的定义(如果尚未定义),它应该是一个时间长的长整数值,例如:

 private static final long MAX_AGE = 24 * 60 * 60;

这里主要的问题在于,addAllowedOrigin方法应该只包含协议、域名和端口,不能指定路径。