Angular Spring Boot:重定向错误:预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段 Content-Type

Posted

技术标签:

【中文标题】Angular Spring Boot:重定向错误:预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段 Content-Type【英文标题】:Angular Spring Boot: Redirection error: Request header field Content-Type is not allowed by Access-Control-Allow-Headers in preflight response 【发布时间】:2019-01-07 16:27:17 【问题描述】:

我在前端使用 Angular 6,在后端使用 Java Spring Boot。

我希望我的登录页面向服务器发出请求。服务器重定向到仪表板页面。

我有 http://localhost:4200/login 角度页面,它向服务器 http://localhost:8080/login 发出 POST 请求

.ts 文件包含:

onLoginClickPost() 
  console.log('redirect request clicked');
  this.data.getUserInfoPost().subscribe(
    data => 
      console.log(data);
      this.userInfo = data;
    
  );


getUserInfoPost() 
    return this.http.post('http://localhost:8080/login', nextUrl: 'http://localhost:4200/dashboard');

服务器有@RestController,其方法映射到传入的POST请求,应该重定向到http://localhost:4200/dashboard:

@CrossOrigin(origins = "http://localhost:4200")
@RequestMapping(value = "/login", method = RequestMethod.POST)
public ResponseEntity<?> login_post(@RequestBody LoginReqPostParam payload) 

    HttpHeaders headers = new HttpHeaders();

    try 
        headers.setLocation(new URI(payload.getNextUrl()));
        headers.add("Access-Control-Allow-Headers", "Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
     catch (URISyntaxException e) 
        logger.error("URI Exception: ", e);
        e.printStackTrace();
    

    return new ResponseEntity<>(headers, HttpStatus.FOUND);

LoginReqPostParam 是一个简单的类,将传入的 JSON 有效负载作为对象。

登录 Angular 页面能够向服务器发出 POST 请求。现在在服务器上,从服务器返回 ResponseEntity 后,我在浏览器控制台中收到以下错误:

无法加载http://localhost:4200/dashboard:请求头字段 Access-Control-Allow-Headers 中不允许 Content-Type 预检响应。

如何重定向到http://localhost:4200/dashboard 页面?我需要在 Angular 仪表板组件文件中添加一些内容吗?

【问题讨论】:

响应的 HTTP 状态码是什么? @sideshowbarker 请求 URL:localhost:4200/dashboard 请求方法:OPTIONS 状态码:200 OK 远程地址:127.0.0.1:4200 推荐人策略:no-referrer-when-downgrade 【参考方案1】:

您正在使用 @CrossOrigin 进行 POST 请求,但 Angular(正在开发中)正在使用 OPTIONS 发送 预检请求

我建议您使用允许所有来源的开发配置文件(您必须在 Bean 中为这些配置文件创建自定义过滤器)

【讨论】:

【参考方案2】:

使用 Allow-Control-Allow-Origin: * 谷歌浏览器的扩展。 并启用跨域资源共享 https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi?hl=en

【讨论】:

我正在使用该扩展程序,但仍然收到错误

以上是关于Angular Spring Boot:重定向错误:预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段 Content-Type的主要内容,如果未能解决你的问题,请参考以下文章

Spring boot zuul错误重定向请求

成功登录后 Spring Boot Security 重定向 - 未定义

WebSSO Spring + Angular 重定向-uri

Spring-Boot:用于重定向的 Web 过滤器

Spring Boot WebSecurityConfigurerAdapter 登录重定向

(spring-boot) http 到 https 重定向,405 方法不允许消息