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

时间:2017-08-05 08:08:44

标签: java apache angular rest weblogic12c

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

到目前为止,我有三种可能的部署方法:

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

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

  3. 将Angular App打包在与Java后端相同的WAR中。所以我最终会使用myserver / myapp作为UI,myserver / myapp / api作为REST端点。

  4. 第四个选项是建立CORS,但我担心使用这种方法的安全性。

    哪种方法正确?

1 个答案:

答案 0 :(得分:1)

如果您被允许做出infra决定,将apache webserver更改为nginx,我们切换到nginx并在并发处理方面获得了很多附加值。 在我们的项目中,角度客户端由nginx webserver提供服务,该服务器与托管在tomcat 8.x(我们的应用服务器)上的java后端进行通信,在app-server之后还有几个层,分别是一个DB服务器和一个弹性搜索服务器。

不要为设置CORS而感到害怕,您最终需要允许一些不是源自您的域和端口的来源请求。

如果你的java技术堆栈有spring mvc,那么设置CORS只需添加几行配置。您甚至可以对您的角度网址进行硬编码,以允许后端服务器仅从您的角度网址提供请求。 在普通的JavaEE世界中,CORS只是另一个过滤器或拦截器,您可以使用所有允许的起源,http方法等设置响应标头。您可以查看它非常简单。

为您的选择

    1. 似乎是合理的,你可以得到一个增值 将SSL加密委托给代理服务器。
    1. 看起来很奇怪,您可能希望将静态内容服务器与动态内容服务器,角度js包,资产分开 如果你将静态服务器分开,那么大多数都是静态的 您可以在无法生成的行中配置无cookie域 服务更快。
  • 3与2相同。

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