基于hook让liferay支持用户ID屏幕名称地址登录

2016年03月29日 Liferay 暂无评论 阅读 770 views 次

我们知道在Liferay中可以使用用户ID、屏幕名称、邮件地址等三种模式中的一种进行登录。进行选择可以控制面板-->Portal设置-->认证处进行修改,如下图:

Liferay认证设置

但是在某些情况下我们可能有特殊需求,希望用户输入userId、邮件地址、屏幕名称任意的一种都可以实现登录,这个时候我们只需要写一个简单的hook就可以实现此功能。

第一步:新建一个Hook工程。

第二步:新建一个Liferay的Hook配置,在里面选择service的选项,如下图:

Liferay hook向导

第三步:选择要hook的service,这里我们要hook的UserLocalService,如下图,其中Service Type处填选择UserLocalService,下面的Impl Class处,选择新建,图下面的所示。

创建userlocalServiceImpl

第四步:我们在新建的ExtUserLocalService类里面重写一个方法,这个方法可以是authenticateByScreenName、authenticateByEmailAddress、authenticateByUserId中的任意一个。

方法的完整写法如下:

@Override
 public int authenticateByScreenName(long companyId, String screenName,
 String password, Map<String, String[]> headerMap,
 Map<String, String[]> parameterMap, Map<String, Object> resultsMap)
 throws PortalException, SystemException {
 
 int result = super.authenticateByScreenName(companyId, screenName, password,
 headerMap, parameterMap, resultsMap);
 
 if (Authenticator.SUCCESS != result) {
 result = super.authenticateByEmailAddress(companyId, screenName, password, headerMap, parameterMap, resultsMap);
 }
if (Authenticator.SUCCESS != result) {
 result = super.authenticateByUserId(companyId, GetterUtil.getLong(screenName), password, headerMap, parameterMap, resultsMap);
 }
 
 return result;
 }

现在将这个hook部署到Liferay里面,就可以实现支持userId、邮件地址、屏幕名称的登录。

用户头像

给我留言

Copyright © IT人生录 保留所有权利.   主题设计 知更鸟 滇ICP备16001547号-1

用户登录

分享到: