我有另一个使用liferay用户数据库的网络应用程序。但在用户访问该网站之前,他需要先进行身份验证。如何实现此功能,我尝试使用电子邮件/密码搜索WS api进行身份验证,但没有找到。
此外,用户仍应能够登录liferay门户网站。登录应该像另一个liferay Web服务。
任何提示?
嗯,既然我可以访问数据库,也许有一种方法是对客户端给出的密码进行哈希处理?并验证存储在数据库中的值。
发现PwdEncryptor类负责加密密码,不幸的是它与liferay有太多的依赖关系,我无法解决它: -
由于
答案 0 :(得分:3)
这可能不是最好的方法,但这个解决方案可能正是您所寻找的。它只需要用户的公司ID,电子邮件和密码。在我的情况下,我有来自liferay的默认公司ID。
要验证电子邮件/密码,您可以在我的情况下调用其他liferay webservice:get-user-id-by-email-address。然后通过HTTP Basic对用户进行身份验证。使用jersey rest webservice调用liferay Web服务时,您可以编写如下代码:
String url += String.format("user/get-user-id-by-email-address?companyId=%s&emailAddress=%s",
properties.getProperty("default.company.id"), email);
ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);
client.addFilter(new HTTPBasicAuthFilter(email, password));
WebResource service = client.resource(url);
ClientResponse response = service.accept("application/json").post(ClientResponse.class);
if (response.getClientResponseStatus() == com.sun.jersey.api.client.ClientResponse.Status.OK) {
//valid user
} else {
//invalid user
}
答案 1 :(得分:1)
您可以通过将Liferay配置为使用CAS或OpenSSO来在您的站点上实施单点登录解决方案。有各种来源:OpenSSO-Liferay,CAS-Liferay。