CORS政策:对预检请求的响应未通过访问控制检查:它没有HTTP正常状态

时间:2019-02-13 13:40:29

标签: java angular spring-boot cors

我将Angular6作为前端运行在 http:// localhost:4200 上,并将Spring Boot(内置Tomcat服务器内置)作为后端(公开GET Rest API)运行在 https:// localhost:8083 / ldap 。运行此命令时,在浏览器上收到CORS策略错误。因此,我在互联网上进行了搜索,并尝试了互联网上建议的多种修复方法。我不确定下面每个解决方案都缺少什么。


未成功解决1:我尝试通过代理运行它。
->与下面的package.json并行创建一个proxy.config.json    内容。
{
   “ / ldap / ”:{
   “ target”:“ https://localhost:8083”,
   “安全”:false,
   “ logLevel”:“调试”,
   “ changeOrigin”:true
    }
}
->在该脚本块内的package.json中添加了以下条目。
   “开始”:“ ng serve --proxy-config proxy.config.json”,

->在服务类中,尝试调用我的spring boot后端rest API    如下图所示。
   返回this.http.get('/ ldap');
现在,当我运行我的应用程序时,出现以下错误:

GET http:// localhost:4200 / ldap 404(未找到):zone.js:3243


未成功的修复2:我在前端调用Rest API之前在标头下面添加了内容。
getUserAuthenticatedFromLDAP(){
        const httpOptions = {
        标头:新的HttpHeaders({
        'crossDomain':'true',
        'mode':'cors',
                 'allowCredentials':'true',
            'origins':'
',
            'allowedHeaders':'',
            'Access-Control-Allow-Origin':'
',
            'Access-Control-Allow-Methods':'GET',
            'Access-Control-Allow-Headers':'来源,X-请求使用,内容类型,接受',
             'Access-Control-Max-Age':'86400'

          })
       };

     返回this.http.get('https://localhost:8083',httpOptions);
  }

从原点“ https://localhost:8083/”到“ http://localhost:4200”的XMLHttpRequest的访问已被CORS策略阻止:对预检请求的响应未通过访问控制检查:没有HTTP正常状态。

未成功解决3:我没有在前端进行更改,而是尝试通过在控制器级别添加以下代码来在API级别进行更改。

@Controller
@CrossOrigin(origins =“ http://localhost:4200”)
公共类WelcomeController {

// This is for LDAP Authentication
@GetMapping("/ldap")
@ResponseBody
public Authentication hello() {
    return LdapSecurity.getAuthentication();
}

}

我在这里再次遇到错误:

从原点“ https://localhost:8083/”到“ http://localhost:4200”的XMLHttpRequest的访问已被CORS策略阻止:对预检请求的响应未通过访问控制检查:没有HTTP正常状态。

更多失败的修复程序:

我什至尝试使用application.properties文件更改Tomcat的标头,但找不到足够的示例或代码来进行任何更改。
在互联网上,有人建议在API级别上实现过滤器,但是我不确定在此类中是否需要添加这些被覆盖的过滤器方法。
最近两天我一直在这个问题上停留。

PS:我看到有人在API层或下面的类中实现了CORS过滤器。现在我的问题是,如果我在下面的类中实现,那么我需要在哪里引用这个类?是web.xml还是其他任何地方。

@配置 @EnableWebSecurity
公共类WebSecurityConfig扩展了WebSecurityConfigurerAdapter {

2 个答案:

答案 0 :(得分:0)

请看一下here,您需要在方法/控制器中启用cors

@CrossOrigin(origins = "http://localhost:9000")
@GetMapping("/greeting")
public Greeting greeting(@RequestParam(required=false, defaultValue="World") String name) {
    System.out.println("==== in greeting ====");
    return new Greeting(counter.incrementAndGet(), String.format(template, name));
}

答案 1 :(得分:0)

我正在使用Spring安全功能进行LDAP身份验证。但是现在我删除了LDAP的Spring安全功能,并使用Java中的基本程序与LDAP建立连接。之后,我在控制器层中使用了CrossOrigin标签,现在我没有遇到CORS问题。谢谢大家的帮助。