启用 CORS 时出现 Spring/Angular CORS 问题 [重复]

Posted

技术标签:

【中文标题】启用 CORS 时出现 Spring/Angular CORS 问题 [重复]【英文标题】:Spring/Angular CORS issue while CORS is enabled [duplicate] 【发布时间】:2021-03-15 21:15:48 【问题描述】:

我正在使用 Spring 框架开发后端。我的前端是使用 Angular 框架编写的。我的 GET 请求被 CORS 政策阻止。

当我使用以下角度函数向 GET 资源发出请求时:

authenticate(credentials, callback) 

        const headers = new HttpHeaders(credentials ? 
            authorization : 'Basic ' + btoa(credentials.username + ':' + credentials.password)
         : );

        this.http.get("http://localhost:8080/user", headers: headers).subscribe(response => 
          console.log(response);
          console.log(this.authenticated);
            if (response['name']) 
                this.authenticated = true;
             else 
                this.authenticated = false;
            
            return callback && callback();
        );

    

我在“网络”选项卡中收到失败的请求。根据我的安全配置,我有时也会收到 401,但在这两种情况下,我都会在控制台中收到“被 cors 阻止”消息。

这是请求被发送到的控制器:

@CrossOrigin(origins = "*", allowedHeaders = "*")
@RestController
public class AuthorizationController 

    @CrossOrigin(origins = "*", allowedHeaders = "*")
    @RequestMapping("/user")
        public Principal user(Principal user) 

        System.out.println(user);
            return user;
        

    

这是我的 Spring 安全配置:

 @Override
    protected void configure(final HttpSecurity http) throws Exception 
              http.httpBasic()
                      .and().authorizeRequests().antMatchers("/**").permitAll()
                      .anyRequest().authenticated();

    

注意:这不是我的首选配置。我正在使用它,因为这是我获得工作的唯一方法。使用此配置,我的 POST 请求正在运行。但是,我之前描述的 GET 请求不适用于此配置。

如有任何提示或帮助,我们将不胜感激,如果您需要有关我的代码的更多信息,请告诉我。

【问题讨论】:

【参考方案1】:

CORS 在浏览器中工作。用 Postman 做同样的动作,应该会成功(如果 Java 代码正确的话)。

您是否设置并运行了角度 代理?好像不行,直接用域名调用API

查看如何启用和使用代理https://angular.io/guide/build#proxying-to-a-backend-server

【讨论】:

直接调用 API 有什么关系?我以前从未听说过它,我一直在关注的教程是:spring.io/guides/tutorials/spring-security-and-angular-js我不认为他们在那里使用一个?感谢您的帮助。 你直接调用 this.http.get("localhost:8080/user" 并通过代理,你只需要调用 this.http.get("user" 和 proxyConfig (就像在我的教程中一样) ,您的应用程序会看到 /user 转到该 localhost 并且会省略代理 配置代理服务器就可以了。但是我想知道,这在技术上是否也可以通过纯 Spring 安全配置来实现? 正如我所说 - 你做的一切都是正确的,但浏览器会使用 CORS 来保护你,所以这一步是必要的。如果您尝试使用 Postman(google it),它可以在没有 CORS 和代理的情况下工作。另外,谷歌“Chrome中的CORS”,也许他们会给出更详细的解释:) 我明白了,现在更多了,我只是觉得它很模糊,因为我遵循的教程是如此“循序渐进”,以至于我几乎认为它不会跳过这样的内容,谢谢帮助

以上是关于启用 CORS 时出现 Spring/Angular CORS 问题 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

更新文档时出现 XMLHttpRequest 错误,但应启用 CORS

发出 POST 请求时出现 Google Cloud Function CORS 错误

上传较大文件时出现 CORS 错误

尝试处理 CORS 请求时出现 ParseError

Cors 问题仅在“放置”时出现?

发送身份验证承载令牌时出现 Cors 策略错误 - node.js(谷歌云功能)