java - 将旧版 Spring MVC + JSP 应用程序与 Angular 应用程序一起运行是个好主意吗?

标签 java angular spring-mvc jsp

我们请求仅将旧系统的一部分迁移到 Angular 8 应用。

前辈建议更改JSP端的一些url以指向新的Angular应用程序,并使新应用程序的布局看起来像旧的JSP布局。

困难的部分是我不知道如何有效地同步 JSP 和 Angular 之间的状态,因为我们必须使两个客户端(JSP 和 Angular)看起来像是一个客户端。这包括身份验证、表单输入、导航栏状态等...

关于身份验证,第一个提出的解决方案是从 JSP 克隆登录页面并公开 Angular 应用程序的登录 api 并返回 jwt token 。但我认为它不会很好地工作,因为我们必须同步两个应用程序之间的登录/注销状态。第二个建议的解决方案是让旧应用程序负责身份验证,并将 jwt token 附加到链接到 Angular 应用程序的每个 url。我担心这种方法会遇到安全问题和 url 长度限制。

以前有人遇到过这个问题吗?你是怎么解决的?您是否建议完全迁移到 Angular?

最佳答案

对于任何已达到一定大小的 Web 应用程序,此类迁移是唯一的出路,因为应用程序太大而无法立即替换。因此必须实现新旧页面的共存。

最简单的方法是每个页面要么完全是 JSP 要么完全是 Angular,即不混合技术。正如您已经确定的,Angular 布局需要足够接近 JSP 布局,以便用户将其体验为单个应用程序。但每次用户从 JSP 切换到 Angular 页面时,Angular 应用程序和所有相关数据加载时都会遇到延迟。需要付出一些努力才能使 make 足够快。

如果您需要共享状态(除了身份验证之外),那么您将需要在 JSP 容器中实现 API,以便 Angular 应用程序可以检索状态并修改它。您可能会发现只有一小部分状态需要共享。

对于身份验证,最简单的设置是 Angular 应用程序是否可以使用 session cookie 访问所有 API。那么你不需要做任何事情。不需要新的身份验证页面,也不需要传递 JWT。

如果需要 JWT,最好的解决方案是设置专门的 IAM(身份和访问管理)负责身份验证。它将实现登录页面并发出 JWT。如果未经身份验证的用户请求 JSP 页面,他/她将被重定向到 IAM、登录并重定向回 JSP 应用程序。 JSP 应用程序验证登录。如果同一用户稍后打开 Angular 页面并且该 Angular 页面需要访问 API,则该用户将首先被重定向到 IAM。由于 IAM 提供 SSO 设施,因此它将检测有效的用户 session 并立即发出 JWT(或身份验证代码),而无需显示登录页面。在这两种情况下,都使用 OAUTH 2/OIDC 流。这两种情况都得到许多框架和库的良好支持。 OIDC 还包括同步注销的功能。

关于java - 将旧版 Spring MVC + JSP 应用程序与 Angular 应用程序一起运行是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60181155/

相关文章:

java - 通过 https 给定 IP 地址的 Spring Boot 白名单

spring - @NumberFormat 注释不起作用

java - 如何防止正则表达式转换 bbcode 超链接?

java - 在 sim 游戏中产生和终止一个人(在 Java 中)

javascript - 在 Angular 6 中读取图像 EXIF 数据

angular - 可以为动态创建的组件触发输出事件吗

Node.js/Express 将所有内容重定向到 Angular 2 页面

java - 相当于PreparedStatement

java单例网络实现runnable

java - 如何获取 url 中传递的值到模型和 View Controller ?