为什么SpringSecurity没有为带有请求头的get请求添加访问控制allow origin?

j2qf4p5b  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(353)

我的目标是调试为什么我可以发送HTTPGET请求而不需要 RequestHeaders ,但无法用发送http get请求 RequestHeaders ,在浏览器上。
我跟随spring.io的教程来学习更多关于csrf和cors的知识。
我试过的:
将get请求发送到 http://localhost:8080/user 带请求头 Authorization: Basic ..... 会给我回cors错误吗

Access to XMLHttpRequest at 'http://localhost:8080/user' from origin 'http://localhost:4200' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

将get请求发送到 http://localhost:8080/user 如果没有请求头,就不会返回cors错误。
注意:如果我没有添加请求头,我已经仔细检查了所有get请求的cors问题是否得到了解决。

@Bean
  CorsConfigurationSource corsConfigurationSource() {
    CorsConfiguration configuration = new CorsConfiguration();
    configuration.setAllowedOrigins(Collections.singletonList("http://localhost:4200"));
    configuration.setAllowedMethods(Arrays.asList("GET", "POST"));
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    source.registerCorsConfiguration("/**", configuration);
    return source;
  }

但是,如果我发送 GET /user 带有请求头 Authorization: Basic .... 我的预期结果是:当我发送带有请求头的get请求时,它不应该返回cors错误。
我的实际结果是:它返回一个cors错误。

aij0ehis

aij0ehis1#

如果使用jdk 8+,有一个解决方案:

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
http.cors().configurationSource(request -> new CorsConfiguration().applyPermitDefaultValues());
}

让我知道这是否有效。

相关问题