Spring Boot 和安全性 - cors
Posted
技术标签:
【中文标题】Spring Boot 和安全性 - cors【英文标题】:Spring boot & security - cors 【发布时间】:2016-07-14 06:05:00 【问题描述】:根据spring boot文档我添加了bean
@Bean
WebMvcConfigurer corsConfigurer()
return new WebMvcConfigurerAdapter()
@Override
public void addCorsMappings(CorsRegistry registry)
registry.addMapping("/**").allowedOrigins("http://localhost:3000");
;
从 localhost:3000 启用全局访问,这是我的前端应用程序。 我也使用弹簧安全,所以如果用户输入 localhost:8080/something 他被重定向到登录页面(如果没有登录)。问题是这个全局 cors 配置不起作用。
我有一个简单的控制器,它返回
List<String>
另一方面,我有角度服务,它负责向服务器发出获取请求。它看起来像这样:
this.http.get("http://localhost:8080/words",
headers: new Headers(
'Authorization': 'Basic ' + btoa('login:password')
)
).map((res:Response) => res.json())
.subscribe(
data => this.words = data,
err => console.error('Error : ' + err),
() => console.log('done')
);
因此我可以在 google chrome 控制台中看到:
XMLHttpRequest cannot load http://localhost:8080/words. Response for preflight is invalid (redirect)
我该如何解决这个问题?
【问题讨论】:
用那个错误信息在谷歌搜索怎么样? 我认为问题是:***.com/questions/17496452/…***.com/questions/29469249/…希望这些可以帮助你。 能否提供OPTIONS请求的响应内容(标头)?谢谢! 【参考方案1】:这是因为您的前端应用程序会在实际数据传输发生之前生成一个 OPTIONS HTTP。尝试将此配置添加到您的 spring 项目中:
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer
@Value("$angular")
private String angularOrigin;
@Bean
public WebMvcConfigurer corsConfigurer()
return new WebMvcConfigurer()
@Override
public void addCorsMappings(CorsRegistry registry)
registry
.addMapping("/**")
.allowedOrigins(angularOrigin)
.allowedHeaders("Authorization", "Cache-Control", "Content-Type", "Accept", "X-Requested-With", "Access-Control-Allow-Origin", "Access-Control-Allow-Headers", "Origin")
.exposedHeaders("Access-Control-Expose-Headers", "Authorization", "Cache-Control", "Content-Type", "Access-Control-Allow-Origin", "Access-Control-Allow-Headers", "Origin")
.allowedMethods("PUT","GET","POST","DELETE","OPTIONS");
;
【讨论】:
以上是关于Spring Boot 和安全性 - cors的主要内容,如果未能解决你的问题,请参考以下文章
没有弹簧安全性的 Spring Boot + React CORS 问题
Spring boot:无法从另一个 Origin 访问安全资源 - CORS - Spring Security - Spring data rest
Angular 2 + CORS + 带有 Spring Security 的 Spring Boot Rest Controller