我正在使用Eclipse开发包含Angular 2前端和Java REST后端的应用程序。
对于前端,我使用的是Angular CLI插件,该插件通过向ng serve
CLI发出命令来启动应用程序。此命令在端口4200上设置http服务器。
对于后端,我使用的公司内部框架在Eclipse的端口8088中的Jetty中启动。
虽然这两个端口都是可配置的,但根据所使用的框架和插件的性质,它们将始终是不同的。
身份验证通过OAuth2服务进行,该服务也作为框架的一部分部署到端口8088。该服务设置一个cookie,该cookie验证浏览器会话是否已通过身份验证。我已经通过针对REST API的Swagger实例(也作为同一框架的一部分在8088中运行)测试了该服务,从而验证了该服务可以正常工作。
问题在于,当浏览器针对:4200上的Angular 2应用时,其对:8088的内部REST API请求没有携带身份验证cookie。据推测,这是由于跨站点保护。
应用程序或框架是否可以通过任何方式告诉浏览器这两个“站点”实际上是同一系统的一部分?
另外,如果必须配置开发浏览器(Chrome)才能正常工作,我也可以使用它。但是,我尝试了--disable-web-security --user-data-dir
推荐,但是cookie仍然没有出现在请求中。
最后,我在开发机器上安装了Apache。如果我可以设置适当的虚拟主机并将其用作代理,以使浏览器认为它们完全相同,那么可能也可以使用。这纯粹是拦截所有的问题/swagger
和/api
请求,并将它们发送到:8088,和所有转发所有其他请求:4200。但是,我一直在反对mod_rewrite和mod_proxy,并且无法提出任何可行的方法。
我想你要找的是
withCredentials = true
https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest/withCredentials
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句