java - 如何正确部署带有 Java 后端的 Angular 2 应用程序?

标签 java apache angular rest weblogic12c

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

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

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

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

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

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

哪种方法是正确的?

最佳答案

如果允许您做出基础设施决策,请将 apache Web 服务器更改为 nginx ,我们切换到 nginx 并在并发处理方面获得了很多附加值。 在我们的项目中, Angular 客户端由 nginx 网络服务器提供服务,该服务器与 tomcat 8.x(我们的应用程序服务器)上托管的 java 后端进行通信,在应用程序服务器之后还有几层,一个单独的数据库服务器和一个 Elasticsearch 服务器。 p>

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

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

对于您的选择

    1. 看起来似乎有道理,而且您获得的附加值是您可以 将 SSL 加密委托(delegate)给代理服务器。
  • 似乎很奇怪,您希望将静态内容服务器与动态内容服务器、您的 Angular js 包、 Assets 分开 等大部分是静态的,如果你将静态服务器分开的话 您可以配置无 cookie 的域,这将使 服务速度更快。
  • 3 与 2 相同。

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

关于java - 如何正确部署带有 Java 后端的 Angular 2 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45519743/

相关文章:

java - java.util.concurrent.locks.Lock 的 AutoCloseable 包装器有任何风险吗?

php - 强制所有用户使用 .htaccess 通过 SSL

Php 错误 : failed to open stream: Permission denied in CentOS 7. 1.1503(核心)

javascript - 单击项目时路由器无法路由

angular - 如何自定义垫选择下拉位置?

java - 从 jTable 获取单个 INT 值

Java 泛型 : Generics not within bounds at initialization

java - eclipse 在完成方法的全名之前自动完成

php - UTF-8贯穿始终

javascript - 如何向 ASP.Net Core API Controller 提交表单