Springboot 2.4.0跨域配置无效及接口访问报错(解决方法)allowedOrigins cannot contain the special value "*"
异常:
java.lang.IllegalArgumentException: When allowCredentials is true, allowedOrigins cannot contain the special value "*"since that cannot be set on the “Access-Control-Allow-Origin” response header. To allow credentials to a set of origins, list them explicitly or consider using “allowedOriginPatterns” instead.
原因:Springboot版本高于2.4.0 才会出现这样的问题,再结合报错信息提示不能使用*号设置允许的Origin
,所以有两个解决方法。
解决方法1:
降低SpringBoot版本。在pom.xml中修改springboot版本值,并刷新
<modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.5.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent>
解决方法2:
如果不降低版本,则在跨域设置时使用setAllowedOriginPatterns
方法。(亲测有效)
修改前:
/** * 跨域配置 */ @Bean public CorsFilter corsFilter() { UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); CorsConfiguration config = new CorsConfiguration(); // 是否允许请求带有验证信息 config.setAllowCredentials(true); // 设置访问源地址 config.addAllowedOrigin("*"); // 设置访问源请求头 config.addAllowedHeader("*"); // 设置访问源请求方法 config.addAllowedMethod("*"); // 对接口配置跨域设置 source.registerCorsConfiguration("/**", config); return new CorsFilter(source); }
修改后:
/** * 跨域配置 */ @Bean public CorsFilter corsFilter() { UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); CorsConfiguration config = new CorsConfiguration(); // 是否允许请求带有验证信息 config.setAllowCredentials(true); // 允许访问的客户端域名 // (springboot2.4以上的加入这一段可解决 allowedOrigins cannot contain the special value "*"问题) List<String> allowedOriginPatterns = new ArrayList<>(); allowedOriginPatterns.add("*"); config.setAllowedOriginPatterns(allowedOriginPatterns); // 设置访问源地址 // config.addAllowedOrigin("*"); // 设置访问源请求头 config.addAllowedHeader("*"); // 设置访问源请求方法 config.addAllowedMethod("*"); // 对接口配置跨域设置 source.registerCorsConfiguration("/**", config); return new CorsFilter(source); }