我们有一个用Angular2开发的前端应用程序,服务(REST服务)是用Spring MVC开发的。当前端app即javascript调用服务时,我们面临跨域问题,服务调用不成功。
在研究中,有一个在服务端包含CORSFilter的选项,但UI调用了大约30个服务,所有这些服务都是单独的可部署的。
改变30项服务是不可行的,除了服务方面的改变外,是否还有其他选择呢?
请提个建议。
发布于 2019-01-24 13:59:10
我认为除了在您的服务器端启用CORS之外,别无他法。也许你可以封装你的应用程序接口端点,制作一个专门的微服务,并在上面启用CORS。
发布于 2019-01-24 14:27:12
在spring boot中有一个解决方案,你可以在这个链接中找到它:https://spring.io/guides/gs/rest-service-cors/我不是特别确定你需要什么,但是@crossOrigin(-->Link of your site<--)在我这端起作用了。
编辑
这里是这个链接中的全局配置:https://spring.io/guides/gs/rest-service-cors/#_global_cors_configuration在我的应用程序上添加了这个之后,它解决了我的问题。
发布于 2019-01-24 15:38:19
我认为,这里有比表面看起来更多的东西&首先理解CORS是很重要的&然后尝试找出解决方案,因为人们在CORS讨论中引入了-、Angular、等词。
假设您已经开发和部署了,并打算从部署在上的特定UI代码中消费某些固定的URL/域API。作为服务器,CORS是一种告诉客户端(如浏览器)的方式,即使我在为这个请求提供服务,但我也要告诉你,这个请求不是来自我作为服务器所期望的UI域(默认情况下是-它必须是同源),所以你需要采取必要的措施。当浏览器被服务器标记时,它会抑制服务器响应,并显示请求失败。
上面的描述确实非常简单,您应该了解更多关于同源安全策略的信息。
此外,请注意,服务器通过设置关于其支持的来源的响应头来标记客户端,但无论如何都要为响应提供服务,因此到目前为止,您应该了解两点。
等客户端实现的
说了这么多,您是否希望您的API托管在与UI域相同的域中?如果不是,那么您需要更改服务器端代码以显式地告知CORS标头,否则浏览器将继续失败。
解决方案,
1.向每个端点添加注释- org.springframework.web.bind.annotation.CrossOrigin。
2.向每个可部署单元添加全局配置,如图示的here。优点是这些工件可以进一步部署到不同的域。
不要只是盲目地复制粘贴这一行,config.addAllowedOrigin("*");,将其设置为您希望服务的特定域,否则拥有此安全性毫无意义。
3.编写另一个可部署的工件来处理CORS等安全问题,这个工件将是接收所有传入请求的前端&然后在构建来自这30个端点的响应后进行响应。客户端不会直接与这30个端点交互,而只能与此工件交互。显然,在与这30个端点相同的域上也需要这个工件。
在30个服务中进行更改并不是一个可行的选择,除了在服务方面进行更改之外,还有没有其他选择?
除了在服务器端修改代码之外,我不认为还有其他解决方案。除了你的团队之外,没有人可以对你指手画脚,因为部署模型是非常合适的主题,并且根据组织之间的需要而定。
源头部在请求中发送,由协议、主机和端口号三部分组成。
https://stackoverflow.com/questions/54339579
复制相似问题