基于hook让liferay支持用户ID屏幕名称地址登录
我们知道在Liferay中可以使用用户ID、屏幕名称、邮件地址等三种模式中的一种进行登录。进行选择可以控制面板-->Portal设置-->认证处进行修改,如下图:
但是在某些情况下我们可能有特殊需求,希望用户输入userId、邮件地址、屏幕名称任意的一种都可以实现登录,这个时候我们只需要写一个简单的hook就可以实现此功能。
第一步:新建一个Hook工程。
第二步:新建一个Liferay的Hook配置,在里面选择service的选项,如下图:
第三步:选择要hook的service,这里我们要hook的UserLocalService,如下图,其中Service Type处填选择UserLocalService,下面的Impl Class处,选择新建,图下面的所示。
第四步:我们在新建的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、邮件地址、屏幕名称的登录。