Java 从Angular前端到Spring后端的POST调用期间出现CORS策略错误
正如在标题中一样,我试图在Java/Spring中的角度前端和REST端点之间建立连接(我没有开发,也不太清楚)。顺便说一句,一切都好。通过邮寄,我在终端接收信息Java 从Angular前端到Spring后端的POST调用期间出现CORS策略错误,java,angularjs,spring,spring-security,Java,Angularjs,Spring,Spring Security,正如在标题中一样,我试图在Java/Spring中的角度前端和REST端点之间建立连接(我没有开发,也不太清楚)。顺便说一句,一切都好。通过邮寄,我在终端接收信息 has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested re
has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
并且,在dev instruments的Network选项卡中,OPTIONS方法出现错误403
Request Method: OPTIONS
Status Code: 403
Remote Address: xx.xx.xx.xx:xxxx
Referrer Policy: strict-origin-when-cross-origin
所以,我在互联网上搜索了几次后发现了这种情况,原因是CORS设置:通常,在这种情况下,在帖子之前会发送一个选项调用;但是,由于CORS的原因,不允许进行期权认购。所以,我试图在我的控制器上设置这一行
@CrossOrigin(origins = "*", methods = {RequestMethod.OPTIONS, RequestMethod.GET, RequestMethod.POST, RequestMethod.PUT, RequestMethod.DELETE})
这一次,错误发生了变化
Multiple CORS header 'Access-Control-Allow-Origin' not allowed
但是我添加的代码是与@CrossOrigin唯一相似的,我发现其他代码没有相似之处
那么,我的问题是:我可以在控制器中搜索哪些代码,或者在其他类中搜索哪些代码,这些类通常具有与上述装饰器相同的角色?
(该应用程序使用SpringSecurity;我没有开发它,我也不是SpringSecurity方面的专家)
编辑:我所做的与本次讨论中的完全相同(与我的不完全相同),但在本例中,我收到一个新错误:
我能做什么?非常感谢您在spring boot项目中向控制器添加以下代码
@CrossOrigin(allowedHeaders =
{"Orgin", "X-Requested-With", "Content-Type", "Accept", "Authorization"},
methods = {RequestMethod.POST, RequestMethod.GET, RequestMethod.PUT,
RequestMethod.DELETE}
)
如果您的服务在本地服务器/任何具有任何代理的服务器上运行,这将解决您的跨源问题。您可以添加一个全局策略以允许访问实现WebMVCConfiguer
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedMethods("*")
.allowedOrigins("*")
.allowedHeaders("*");
}
}谢谢,但问题不是这个!问题是,如果我这样做,我会收到消息“Multiple CORS header'Access Control Allow Origin'not allowed”。请阅读我文章的最后一部分,直到最后。非常感谢你的帮助!您的解决方案不起作用,因为DispatcherServlet是在Spring安全过滤器链之后执行的。飞行前请求从未到达dispatcher servlet。谢谢,但问题不是这个!问题是,如果我这样做,我会收到消息“Multiple CORS header'Access Control Allow Origin'not allowed”。请阅读我文章的最后一部分,直到最后。非常感谢你的帮助@阿基米德他的回答不完整,但至少它告诉你,你必须删除
RequestMethod。选项
以消除错误,不允许多个CORS标题“访问控制允许源代码”。你的客户发送了什么Origin
标题?Spring Security仅返回原点
标题值,请参阅
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedMethods("*")
.allowedOrigins("*")
.allowedHeaders("*");
}