【问题标题】:Spring boot & security - corsSpring Boot 和安全性 - 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)

我该如何解决这个问题?

【问题讨论】:

标签: java spring spring-boot cors angular


【解决方案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");
      }
    };
  }
}

【讨论】:

    猜你喜欢
    • 2017-03-10
    • 2020-05-29
    • 2020-02-02
    • 2019-03-02
    • 2015-02-26
    • 1970-01-01
    • 2016-05-03
    • 2020-08-09
    相关资源
    最近更新 更多