将传统的Spring MVC + JSP应用程序与Angular应用程序一起运行是一个好主意吗?



我们请求仅将遗留系统的一部分迁移到 angular 8 应用程序。

老年人建议更改JSP端的一些url以指向新的角度应用程序,并使新应用程序的布局看起来像旧的JSP布局。

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

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

以前有没有人有这个问题?你是怎么解决的?您是否建议完全迁移到角度?

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

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

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

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

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

这不是一个好主意,但遗留应用程序将面临直接迁移方法来适应新技术。我们在 React 中也做了类似的练习。

JSP 是服务器端处理的。你要用角度SSR吗?在 Angular 客户端处理的情况下,您可以使用会话/cookie 来共享用户信息,如 JWT 并处理状态。

我们只需要迁移导致页面反应缓慢的问题。我们使用 Redux 作为状态。删除了整个 JSP 页面并开发了相应的 React 组件,因此 api 调用来自 React。一些链接调用JSP页面 - 很少使用http会话来传递数据。对于少数复杂的 json 数组(在提交到后端之前需要多次追加(,数据存储在 Redis 中,并由后端和任何 JSP 页面检索。

整个应用程序部署为单个春季启动大战。

相关内容

最新更新