将一个模块与JSF应用程序分开

时间:2018-04-26 09:10:09

标签: rest jsf java-ee architecture microservices

我们有大型的JSF单片应用程序。我们想要改变这个应用程序的架构。目前,我的目标 - 在我们的应用程序中更改一个模块。我需要将逻辑从一个模块转移到另一个应用程序,这个应用程序将在另一个技术堆栈上实现(它将在前端使用一些js-framework进行休息服务)。

应用程序应该以相同的方式工作。我们应该像以前一样拥有该页面的链接,但是该页面应该由另一个服务呈现。我们应该在这两个应用程序之间进行相同的会话。用户应该能够在没有额外的身份验证步骤的情况下抛出页面。

我们计划移动其他模块,而不仅仅是这个模块。我需要帮助。你有什么想法应该如何实施?任何例子?

1 个答案:

答案 0 :(得分:1)

为我这样做的理想方法是使用像keycloak这样的SSO服务作为您的身份提供商。这涉及将身份验证逻辑移植到它并将其与整体结构分离。但是,一旦您依赖它作为您的IdP,您只需在您的应用程序和IdP之间共享令牌。 Keycloak有许多适配器,适用于Java,Javascript,NodeJs客户端......等等。这有一个巨大的优势,你可以保持逻辑与你的整体解耦,你甚至不需要用Java编写新的模块。您甚至可以将它与非您编写的服务集成,这足以让他们拥有Open Id Connect或SAML集成。

KC支持SAML和OIDC Auth协议。使用OIDC(使用全新应用程序的方式),位于每个应用程序中的适配器检查用户是否具有有效的Web会话。如果没有,它将被重定向到KC登录页面。有效登录的结果是一个代码,您可以使用该代码获取访问令牌(从您的应用程序获取资源的有效令牌)。除此之外,适配器将访问令牌绑定到浏览器Web会话,该会话也存储在KC中。因此,如果您尝试访问其他网页,则适配器会检查您的网络会话,该会话发现有效。

您也可以使用它从移动设备访问您的应用,自行处理移动应用中的访问令牌管理/续订。

enter image description here

另见: