如上如图所示,请求项目接口提示: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.
问题中的异常提示很明确:当allowCredentials
设置为true
时,你不能在allowedOrigins
中包含特殊值"*"
。这是因为无法在Access-Control-Allow-Origin
响应头中设置这个特殊值。如果你想对一组来源允许凭证,你应该明确地列出它们,或者考虑使用allowedOriginPatterns
解决方案:
- 明确列出允许的源:
如果你知道哪些源应该接收凭证,你可以将它们明确地添加到allowedOrigins
列表中。例如:
allowedOrigins: ["http://example.com", "http://example2.com"]
- 使用
allowedOriginPatterns
:
如果你想根据某种模式来允许源,你可以使用allowedOriginPatterns
。例如:
allowedOriginPatterns: ["http://*.example.com"]
这样,所有来自以.example.com
结尾的URL都将被允许。
3. 不要设置allowCredentials
为true
:
如果你不想对任何来源都允许凭证,你可以简单地不设置或设置allowCredentials
为false
。
根据你的具体需求和情况,选择合适的解决方案。如果你提供更多关于你的代码和使用的库的信息,我可能能提供更具体的帮助。
下面的是我的跨域处理代码,不设置allowCredentials
为true
,将@Configuration注释即可。
/**
* <h3>gsoft-newgrand-n3c</h3>
* <p>CORS跨域</p>
*
* @author : jyh
* @date : 2019/10/28
*/
//@Configuration
public class CustomCORSConfiguration {
private CorsConfiguration buildConfig() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.addAllowedOrigin("*");
corsConfiguration.addAllowedHeader("*");
corsConfiguration.addAllowedMethod("*");
corsConfiguration.setAllowCredentials(true);
return corsConfiguration;
}
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", buildConfig());
return new CorsFilter(source);
}
}