我正在使用Eclipse开发一个由Angular 2前端和Java REST后端组成的应用程序。
对于前端,我使用Angular CLI插件,该插件通过向CLI发出ng serve
命令来启动应用程序。此命令在端口4200上设置http服务器。
对于后端,我使用的是公司内部框架,该框架在Eclipse 808端口的Jetty中启动。
虽然这两个端口都是可配置的,但根据使用的框架和插件的性质,它们总是不同的。
身份验证通过OAuth2服务工作,该服务也部署到端口8088,作为框架的一部分。此服务设置一个cookie,用于证明浏览器会话已通过身份验证。我已经通过对REST API的Swagger实例(也在8088中作为同一框架的一部分运行)测试它来验证此服务是否正常工作。
问题在于,当浏览器针对:4200上的Angular 2应用程序时,其内部REST API请求:8088不携带身份验证cookie。据推测,这是因为跨站点保护。
有没有办法让应用程序或框架告诉浏览器这两个"网站"实际上是同一系统的一部分?
或者,如果我必须配置开发浏览器(Chrome),我也可以使用它。不过,我已经尝试了--disable-web-security --user-data-dir
推荐,但Cookie仍然没有显示在请求中。
最后,我在开发机器上安装了Apache。如果我可以设置适当的虚拟主机并将其用作代理,以便浏览器认为它完全相同,那么这也可能有效。这只是拦截所有/swagger
和/api
请求并将其发送到:8088,并将所有其他请求转发到:4200。但是,我一直在反对mod_rewrite和mod_proxy,并且没有能够提出任何有用的东西。
答案 0 :(得分:1)
我认为您正在寻找的是
withCredentials = true
https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials