我正在尝试在 Liferay 上无缝登录到 Konakart 客户 portlet,在那里我安装了两个单独的 Konakart 实例(具有不同.war
的文件和不同的数据库。这意味着这两个不以任何方式相互了解)。
我所知道的是,我可能会制作一个钩子来捕捉 Liferay 登录事件。之后呢?我应该编写一个代码来访问 Konakart,但是该怎么做呢?
特别的一点是,在同一个 Liferay 上有两个 Konakart 实例,我不知道如何在代码中将用户添加到其中一个。
我正在尝试在 Liferay 上无缝登录到 Konakart 客户 portlet,在那里我安装了两个单独的 Konakart 实例(具有不同.war
的文件和不同的数据库。这意味着这两个不以任何方式相互了解)。
我所知道的是,我可能会制作一个钩子来捕捉 Liferay 登录事件。之后呢?我应该编写一个代码来访问 Konakart,但是该怎么做呢?
特别的一点是,在同一个 Liferay 上有两个 Konakart 实例,我不知道如何在代码中将用户添加到其中一个。
多存储多数据库的问题
你说你有多个 KonaKart 部署和多个数据库。
来自 KonaKart 文档:
“KonaKart 提供多商店功能,使您能够从单个 KonaKart 部署和单个数据库运行您的商店。”
后来它还说:
“在多商店多数据库模式下,不支持共享客户,因此创建的用户仅被授权登录自己的商店。”
如果您希望您的门户用户能够访问您的所有商店并且客户详细信息在商店之间保持同步,那么不建议安装多个数据库安装。但是,如果您希望不同的用户组看到不同的商店,那么您应该没问题。
将 Liferay 与 KonaKart portlet 集成
Liferay 实现了 PortletRequestImpl getRemoteUser(),因此门户应该在门户和 KonaKart portlet 之间传递一个用户 ID,可以在 portlet 中使用request.getRemoteUser()访问该用户 ID 。
根据这个线程,您还应该能够从您的 portlet 内部的Liferay 的UserServiceUtil获取其他详细信息(包括用户电子邮件)。
KonaKart 使用Apache Portal 的 Struts Bridge,这意味着在应用程序的 Java 部分中几乎没有任何特定于 portlet 的代码(在大多数情况下,这似乎是一个典型的 Struts 1.2.7 应用程序)。您应该能够像往常一样使用请求和会话,并让网桥担心细节。也就是说,必须特别注意通过使用 Struts 标记的 Struts Bridge 版本(可识别门户)来确保 JSP 在门户容器中工作。使用 Struts 桥接还意味着可以“独立”运行相同的应用程序(即可以直接在门户容器之外访问)。
看起来 Liferay 和 KonaKart 之间的通用标识符将是客户的电子邮件地址。
查看 KonaKart 源代码,大部分内部处理都使用客户 ID(一个 int),并且客户 ID 是通过登录方法获取的,该登录方法将客户电子邮件和密码作为参数。您可以将所有用户的密码设置为只有 portlet 知道的某个秘密值,尽管这意味着您只能通过门户访问 KonaKart(因为客户不知道他们在独立模式下的密码)。
我看过 KonaKart-5.5.0.2 的源代码。看起来大部分有趣的代码都在以下两个地方之一:
~konakart\custom\appn\src\com\konakart\actions
~konakart\java_api_examples\src\com\konakart\apiexamples
我认为您可能需要自定义 BaseAction 中的loggedIn方法,以从请求中获取 Liferay 用户详细信息并使用电子邮件地址获取客户 ID。
您可能还希望能够以编程方式进行一定数量的客户注册。一些细节需要由客户设置——例如 Liferay 通常不保存门户用户的地址细节。一些最好的地方是带有“ SubmitAction ”后缀的类,因为这些是通常在表单提交之后发生的 Struts 动作,一些值得研究的类包括:
com.konakart.actions.BaseAction:特别是“loggedIn”方法,它检查我们是否登录(并返回客户ID)。
com.konakart.actions.EditCustomerSubmitAction:在提交编辑客户页面后被调用,并显示如何编辑客户信息。
com.konakart.actions.CustomerRegistrationSubmitAction:在提交客户注册页面后被调用,并显示如何注册客户信息。
com.konakart.actions.ChangePasswordSubmitAction
com.konakart.apiexamples.GetCustomer:如果您有他们的电子邮件地址,则获取 KonaKart 客户的详细信息
com.konakart.apiexamples.RegisterCustomer:客户注册的另一个例子
我希望这有帮助
我们最近实施了这个。您将需要修改 BaseAction java 文件。您可以在http://www.surekhatech.com/blog/-/blogs/konakart-integration-with-liferay阅读详细信息。
高拉夫沙阿