我将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 {
答案 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问题。谢谢大家的帮助。