在 spring 引导应用程序中配置 cors。 Bean CorsConfigurationSource 不起作用
Configuring cors in spring boot application. Bean CorsConfigurationSource doesnt work
所以我无法配置cors。由于错误,我的 angular 应用无法发送 api 请求。
我可以通过 soapUI 执行请求,它们工作正常。但是从浏览器有:
对“http://localhost:8080/backend/api/public' from origin 'http://localhost:4200”处的 XMLHttpRequest 的访问已被 CORS 策略阻止:请求的资源上不存在 'Access-Control-Allow-Origin' header。
我正在寻找答案,它们看起来像我的 class。
我正在使用 spring 引导网络安全。
@EnableWebSecurity
@Configuration
public class AuthConfig extends WebSecurityConfigurerAdapter {
@Value(value = "${auth0.apiAudience}")
private String apiAudience;
@Value(value = "${auth0.issuer}")
private String issuer;
@Bean
CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(Arrays.asList("http://localhost:4200"));
configuration.setAllowedMethods(Arrays.asList("GET","POST"));
configuration.setAllowCredentials(true);
configuration.addAllowedHeader("Authorization");
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**",configuration);
return source;
}
@Override
protected void configure(HttpSecurity http) throws Exception {
JwtWebSecurityConfigurer
.forRS256(apiAudience, issuer)
.configure(http)
.authorizeRequests()
.antMatchers(HttpMethod.GET,"/api/public").permitAll()
.antMatchers(HttpMethod.GET, "/api/private").authenticated()
.antMatchers(HttpMethod.GET, "/api/private-scoped").hasAnyAuthority("read:posts");
}
}
这个 bean 应该添加这个 cors header 但它没有。也许你知道这样做有什么更好的主意吗?
WebSecurityConfigurerAdapter 和 WebMvcConfigurerAdapter 有什么区别?
根据 this,您还应该在 configure()
方法中添加 .cors().and()
。
还有其他可能的解决方案,例如设置特定于每个端点的 CORS 配置,如 here。
如果您想为整个应用程序启用 CORS,第一种方法更漂亮。
WebSecurityConfigurerAdapter 和 WebMvcConfigurerAdapter 之间的区别在于,WebSecurityConfigurerAdapter 用于配置与 Web 应用程序安全相关的任何内容,例如身份验证和授权。使用 WebMvcConfigurerAdapter,您可以为 Spring MVC 自定义基于 Java 的配置。
我遇到了同样的问题,无法使 CorsConfigurationSource bean 工作。所以我尝试了一种不同的方法。我没有使用 CorsConfigurationSource bean 配置。相反,我使用了 cors 注册表替代方案或全局 CORS 配置。
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("http://localhost:4200")
.allowCredentials(true);
}
}
从您的 AuthConfig class 中删除 CorsConfigurationSource 配置 bean。
我从 https://www.baeldung.com/spring-cors
得到了这段代码
所以我无法配置cors。由于错误,我的 angular 应用无法发送 api 请求。 我可以通过 soapUI 执行请求,它们工作正常。但是从浏览器有:
对“http://localhost:8080/backend/api/public' from origin 'http://localhost:4200”处的 XMLHttpRequest 的访问已被 CORS 策略阻止:请求的资源上不存在 'Access-Control-Allow-Origin' header。
我正在寻找答案,它们看起来像我的 class。
我正在使用 spring 引导网络安全。
@EnableWebSecurity
@Configuration
public class AuthConfig extends WebSecurityConfigurerAdapter {
@Value(value = "${auth0.apiAudience}")
private String apiAudience;
@Value(value = "${auth0.issuer}")
private String issuer;
@Bean
CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(Arrays.asList("http://localhost:4200"));
configuration.setAllowedMethods(Arrays.asList("GET","POST"));
configuration.setAllowCredentials(true);
configuration.addAllowedHeader("Authorization");
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**",configuration);
return source;
}
@Override
protected void configure(HttpSecurity http) throws Exception {
JwtWebSecurityConfigurer
.forRS256(apiAudience, issuer)
.configure(http)
.authorizeRequests()
.antMatchers(HttpMethod.GET,"/api/public").permitAll()
.antMatchers(HttpMethod.GET, "/api/private").authenticated()
.antMatchers(HttpMethod.GET, "/api/private-scoped").hasAnyAuthority("read:posts");
}
}
这个 bean 应该添加这个 cors header 但它没有。也许你知道这样做有什么更好的主意吗? WebSecurityConfigurerAdapter 和 WebMvcConfigurerAdapter 有什么区别?
根据 this,您还应该在 configure()
方法中添加 .cors().and()
。
还有其他可能的解决方案,例如设置特定于每个端点的 CORS 配置,如 here。
如果您想为整个应用程序启用 CORS,第一种方法更漂亮。
WebSecurityConfigurerAdapter 和 WebMvcConfigurerAdapter 之间的区别在于,WebSecurityConfigurerAdapter 用于配置与 Web 应用程序安全相关的任何内容,例如身份验证和授权。使用 WebMvcConfigurerAdapter,您可以为 Spring MVC 自定义基于 Java 的配置。
我遇到了同样的问题,无法使 CorsConfigurationSource bean 工作。所以我尝试了一种不同的方法。我没有使用 CorsConfigurationSource bean 配置。相反,我使用了 cors 注册表替代方案或全局 CORS 配置。
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("http://localhost:4200")
.allowCredentials(true);
}
}
从您的 AuthConfig class 中删除 CorsConfigurationSource 配置 bean。 我从 https://www.baeldung.com/spring-cors
得到了这段代码