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