Java 浏览器中的CORS飞行前错误,但邮递员请求有效

Java 浏览器中的CORS飞行前错误,但邮递员请求有效,java,angular,spring-boot,spring-security,Java,Angular,Spring Boot,Spring Security,我对棱角分明的世界还很陌生,所以如果这是一个愚蠢的问题,请原谅 在尝试通过angular应用程序访问rest API时,我遇到了以下错误 访问位于“”的XMLHttpRequesthttp://localhost:8080/bean/user“从 起源'http://localhost:4200'已被CORS策略阻止: 对飞行前请求的响应未通过访问控制检查:否 “Access Control Allow Origin”标头出现在请求的服务器上 资源 以下是我的spring安全配置: @Overr

我对棱角分明的世界还很陌生,所以如果这是一个愚蠢的问题,请原谅

在尝试通过angular应用程序访问rest API时,我遇到了以下错误

访问位于“”的XMLHttpRequesthttp://localhost:8080/bean/user“从 起源'http://localhost:4200'已被CORS策略阻止: 对飞行前请求的响应未通过访问控制检查:否 “Access Control Allow Origin”标头出现在请求的服务器上 资源

以下是我的spring安全配置:

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors().and()
        .csrf().disable()   
        .authorizeRequests()
        .antMatchers(HttpMethod.OPTIONS,"/**").permitAll()
                .anyRequest().authenticated()
                .and()
        .httpBasic();   
    }
我尝试向API添加跨源注释,但也没有成功

@CrossOrigin(origins="http://localhost:4200")
@GetMapping(path="/bean/{name}")
public Bean path(@PathVariable String name) {
    return new Bean(name);
}
有人建议将内容类型设置为文本/纯文本,所以我也尝试了,但没有成功。下面是一个有角度的片段,用于调用

executeBeanService(name: string) {
    let basicAuthHeaderString = this.createBasicAuthenticationHttpHeader();
    let header = new HttpHeaders ( {
      'Content-Type':'text/plain',
      Authorization: basicAuthHeaderString

    })

    return this.http.get<Bean>(`http://localhost:8080/bean/${name}`,
    {headers: header});
  }
executeBeanService(名称:字符串){
让basicAuthHeaderString=this.createBasicAuthenticationHttpHeader();
let header=新的HttpHeader({
“内容类型”:“文本/普通”,
授权:basicAuthHeaderString
})
返回this.http.get(`http://localhost:8080/bean/${name}`,
{headers:header});
}

任何帮助都将不胜感激

错误现在已解决。问题是组件扫描。因为这是Spring Boot应用程序,所以安全配置应该在声明@SpringBootApplication注释的类的同一个包/子包中。在我的例子中,包的名称是不同的。重构包名并重新启动应用程序解决了问题。

从问题的标题来看,您似乎对邮递员的工作方式感到惊讶。浏览器执行跨来源检查,邮递员不执行。这就是为什么。您的spring应用程序必须将头发送回web应用程序,告诉它允许跨源请求。例如,它来自的域。