cors飞行前错误,但 Postman 请求有效

uurv41yg  于 2021-09-30  发布在  Java
关注(0)|答案(1)|浏览(661)

我对棱角分明的世界还很陌生,所以如果这是一个愚蠢的问题,请原谅
在尝试通过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);
}

有人建议将内容类型设置为文本/纯文本,所以我也尝试了,但没有成功。下面是一个有Angular 的片段,用于调用

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});
  }

任何帮助都将不胜感激!

lmyy7pcs

lmyy7pcs1#

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

相关问题