如何使用 Java 后端正确部署 Angular 2 应用程序?

How to properly deploy an Angular 2 app with a Java backend?

场景是这样的:我正在开发一个带有 Angular 2 前端的 Java EE 应用程序。客户端有一个通常用于提供静态资源的 Apache 服务器和一个用于动态部分的 Oracle Weblogic。问题是默认情况下 Angular 2 应用程序和 Weblogic 服务器由于同源策略将无法相互通信。

到目前为止,我想到了 3 种可能的部署方法:

  1. 在 Apache 中设置 Reverse Proxy 以将 REST 端点指向 Weblogic

  2. 将 Angular 应用程序打包到 WAR/EAR 中并将其部署到 Weblogic。所以我最终会得到类似的东西: myserver/myapp 用于 UI 和 myserver/myapp-rest 用于后端。

  3. 将 Angular 应用程序打包在与 Java 后端相同的 WAR 中。所以我最终会得到 UI 的 myserver/myapp 和 REST 端点的 myserver/myapp/api。

还有第四个选项可以设置 CORS,但我担心使用该方法的安全性。

哪种方法正确?

如果允许您做出基础决策,将 apache 网络服务器更改为 nginx,我们切换到 nginx 并在并发处理方面获得了很多附加值。 在我们的项目中,angular 客户端由 nginx 网络服务器提供服务,它与托管在 tomcat 8.x(我们的应用服务器)上的 java 后端通信,angular 之后还有几层 app-server一个单独的数据库服务器和一个弹性搜索服务器。

不要害怕设置 CORS,您最终将需要允许一些并非源自您的域和端口的来源请求。

如果您的 java 技术栈有 spring mvc ,那么设置 CORS 只是添加几行配置的问题。您甚至可以对您的 angular url 进行硬编码,以允许后端服务器仅处理来自您的 angular URL 的请求。 在普通的 JavaEE 世界中,CORS 只是另一个过滤器或拦截器,您可以在其中使用所有允许的来源、http 方法等设置响应 headers。非常简单,您可以查找它。

根据您的选择

    1. 这似乎是合理的,而且您可以获得的附加值是可以的 将 SSL 加密委托给代理服务器。
    1. 似乎很奇怪,您可能希望将静态内容服务器与动态内容服务器、您的 angular js 包、资产分开 etc 大部分是静态的,如果你将静态服务器分开,那么 您可以配置 cookie-less 域 上菜快多了。
  • 3 与 2 相同。

根据我过去的经验,我强烈建议使用 CORS 选项。