我对棱角分明的世界还很陌生,所以如果这是一个愚蠢的问题,请原谅
在尝试通过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});
}
任何帮助都将不胜感激!
1条答案
按热度按时间lmyy7pcs1#
错误现在已解决。问题是组件扫描。因为这是spring boot应用程序,所以安全配置应该在声明@springbootapplication注解的类的同一个包/子包中。在我的例子中,包的名称是不同的。重构包名并重新启动应用程序解决了这个问题。