【发布时间】:2019-07-07 08:52:27
【问题描述】:
我使用 Angular6 作为在 http://localhost:4200 上运行的前端和 Spring Boot(它具有内置的 Tomcat 服务器)作为在 上运行的后端(公开 GET Rest API) https://localhost:8083/ldap 。当我运行它时,我在浏览器上收到 CORS 策略错误。所以我在互联网上搜索并尝试了互联网上建议的多个修复程序。我不确定以下每个解决方案都缺少什么。
不成功的修复 1: 我尝试通过代理运行它。
-> 与 package.json 并行创建了一个 proxy.config.json,如下所示
内容。
{
"/ldap/": {
"目标": "https://localhost:8083",
“安全”:假,
"logLevel": "调试",
“changeOrigin”:真
}
}
-> 在脚本块内的 package.json 中添加了以下条目。
"start":"ng serve --proxy-config proxy.config.json",
-> 在服务类中,尝试调用我的spring boot backend rest API
如下所示。
return this.http.get('/ldap');
现在,当我运行我的应用程序时,出现以下错误:
GET http:// localhost:4200/ldap 404(未找到):zone.js:3243
不成功的修复 2: 我在调用 Rest API 之前添加了以下标题在我的前端。
getUserAuthenticatedFromLDAP() {
常量 httpOptions = {
标头:新的 HttpHeaders({
'crossDomain':'true',
'模式' : 'cors',
'allowCredentials': 'true',
'起源':'',
'allowedHeaders': '',
'Access-Control-Allow-Origin': '',
'访问控制允许方法':'GET',
'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Accept',
“访问控制最大年龄”:“86400”
})
};
返回 this.http.get('https://localhost:8083' , httpOptions);
}
从源“http://localhost:4200”访问“https://localhost:8083/”处的 XMLHttpRequest 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:它没有 HTTP ok状态。
不成功的修复 3: 我没有在前端进行更改,而是尝试通过在控制器级别添加以下代码来在 API 级别进行更改。
@控制器
@CrossOrigin(origins = "http://localhost:4200")
公共类 WelcomeController {
// This is for LDAP Authentication
@GetMapping("/ldap")
@ResponseBody
public Authentication hello() {
return LdapSecurity.getAuthentication();
}
}
这里我再次遇到错误:
从源“http://localhost:4200”访问“https://localhost:8083/”处的 XMLHttpRequest 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:它没有 HTTP ok状态。
更多不成功的修复:
我什至尝试使用 application.properties 文件更改 Tomcat 的标头,但找不到足够的示例或代码片段来进行任何更改。
在互联网上,有些人建议在 API 级别实现过滤器,但我不确定在哪个类中我需要添加那些覆盖的过滤器方法。
过去两天我一直在这个问题上。
PS:我看到有些人在 API 层实现了 CORS 过滤器或实现了如下所示的类。现在我的问题是,如果我在下面的类中实现,那么我需要在哪里引用这个类?是 web.xml 还是其他任何地方。
@配置
@EnableWebSecurity
公共类 WebSecurityConfig 扩展 WebSecurityConfigurerAdapter {
【问题讨论】:
-
您需要从服务器(API)端启用 CORS
-
因为我使用的是嵌入了 tomcat 的 Springboot。知道如何在那里启用 CORS 吗?
-
不,我不知道在 springboot 中启用。或者,您可以启用 Chrome CORS 扩展以用于开发目的chrome.google.com/webstore/detail/allow-control-allow-origi/…
-
您的后端不应授权预检请求(您看到的 OPTIONS 请求从您的浏览器中发出)。您必须有一些安全层后端为这些请求返回 401/403。安全层应该简单地忽略预检请求。
-
@sp00m : 我正在使用带有嵌入式 tomcat 服务器的 spring boot,所以你能建议我在哪里以及在哪个文件中进行更改以解决这个问题
标签: java angular spring-boot cors