问题描述
我使用 Angular6 作为在http:// localhost:4200上运行的前端,使用 Spring Boot(内置 Tomcat 服务器)作为在https:// localhost:8083/ldap上运行的后端(暴露 GET Rest API)。 当我运行它时,我在浏览器上收到 CORS 策略错误。 所以我在互联网上搜索并尝试了互联网上建议的多个修复程序。 我不确定我在下面的每个解决方案中缺少什么。
不成功的修复 1:我尝试通过代理运行它。
-> 创建了一个与 package.json 并行的 proxy.config.json 并包含以下内容。
{
“/ldap/ ”:{
"目标": " ",
“安全”:假,
"logLevel": "调试",
"changeOrigin": 真
}
}
-> 在那里的脚本块中的 package.json 中添加了以下条目。
"start":"ng serve --proxy-config proxy.config.json",
-> 在服务类中,尝试调用我的 Spring Boot 后端休息 API,如下所示。
返回 this.http.get('/ldap');
现在,当我运行我的应用程序时,出现以下错误:
GET http://localhost:4200/ldap 404(未找到):zone.js:3243
不成功的修复 2:我在前端调用 Rest API 之前添加了以下标题。
getUserAuthenticatedFromLDAP() {
const httpOptions = {
标头:新的 HttpHeaders({
'crossDomain': '真',
'模式':'cors',
'allowCredentials': '真',
'起源':' ',
'allowedHeaders': ' ',
'Access-Control-Allow-Origin': ' ',
'访问控制允许方法':'GET',
'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Accept',
“访问控制最大年龄”:“86400”
})
};
返回 this.http.get(' ' , httpOptions);
}
不成功的修复 3:我没有在前端进行更改,而是尝试通过在控制器级别添加以下代码来在 API 级别进行更改。
@控制器
@CrossOrigin(origins = " ")
公共类欢迎控制器{
// This is for LDAP Authentication
@GetMapping("/ldap")
@ResponseBody
public Authentication hello() {
return LdapSecurity.getAuthentication();
}
}
在这里,我再次遇到以下错误:
更多不成功的修复:
我什至尝试使用 application.properties 文件更改 Tomcat 的标头,但找不到足够的示例或代码段来进行任何更改。
在互联网上,有些人建议在 API 级别实现过滤器,但我不确定在哪个类中我需要添加那些覆盖的过滤器方法。
我被困在这个问题上 2 天了。
PS:我看到有些人在 API 层实现了 CORS 过滤器或实现了如下所示的类。
现在我的问题是,如果我在类下面实现,那么我需要在哪里引用这个类?
是 web.xml 还是其他任何地方。
@Configuration @EnableWebSecurity
公共类 WebSecurityConfig 扩展了 WebSecurityConfigurerAdapter {
1楼
我正在使用 Spring 安全功能进行 LDAP 身份验证。 但现在我删除了 LDAP 的 Spring 安全功能,并使用 Java 中的基本程序与 LDAP 建立连接。 之后我在控制器层使用了 CrossOrigin 标签,现在我没有遇到 CORS 问题。 谢谢大家的帮助。
2楼
请看,您需要在您的方法/控制器中启用 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));
}