我需要覆盖portalLDAPImporterImpl.java
addUser()
方法,以便在从LDAP导入用户并添加到Liferay后执行某些操作。我按照这些步骤(Eclipse环境):
代码提取:
@Override
protected User addUser(long companyId, LDAPUser ldapUser, String password)
throws Exception {
if (_log.isDebugEnabled()) {
_log.debug("Adding user " + ldapUser.getEmailAddress());
}
boolean autoPassword = ldapUser.isAutoPassword();
if (!PropsValues.LDAP_IMPORT_USER_PASSWORD_ENABLED) {
autoPassword = PropsValues.LDAP_IMPORT_USER_PASSWORD_AUTOGENERATED
&& !PropsValues.AUTH_PIPELINE_ENABLE_LIFERAY_CHECK;
if (!autoPassword) {
String defaultPassword = PropsValues.LDAP_IMPORT_USER_PASSWORD_DEFAULT;
if (StringUtil.equalsIgnoreCase(defaultPassword,
_USER_PASSWORD_SCREEN_NAME)) {
defaultPassword = ldapUser.getScreenName();
}
password = defaultPassword;
}
}
Calendar birthdayCal = CalendarFactoryUtil.getCalendar();
birthdayCal.setTime(ldapUser.getBirthday());
int birthdayMonth = birthdayCal.get(Calendar.MONTH);
int birthdayDay = birthdayCal.get(Calendar.DAY_OF_MONTH);
int birthdayYear = birthdayCal.get(Calendar.YEAR);
User user = UserLocalServiceUtil.addUser(ldapUser.getCreatorUserId(),
companyId, autoPassword, password, password,
ldapUser.isAutoScreenName(), ldapUser.getScreenName(),
ldapUser.getEmailAddress(), 0, StringPool.BLANK,
ldapUser.getLocale(), ldapUser.getFirstName(),
ldapUser.getMiddleName(), ldapUser.getLastName(), 0, 0,
ldapUser.isMale(), birthdayMonth, birthdayDay, birthdayYear,
StringPool.BLANK, ldapUser.getGroupIds(),
ldapUser.getOrganizationIds(), ldapUser.getRoleIds(),
ldapUser.getUserGroupIds(), ldapUser.isSendEmail(),
ldapUser.getServiceContext());
_log.info("-----------------------------------------User||||Added----------------------------------------");
if (ldapUser.isUpdatePortrait()) {
byte[] portraitBytes = ldapUser.getPortraitBytes();
if (ArrayUtil.isNotEmpty(portraitBytes)) {
user = UserLocalServiceUtil.updatePortrait(user.getUserId(),
portraitBytes);
}
}
return user;
}
答案 0 :(得分:1)
我也覆盖了PortalLDAPImporterImpl.java
。您不必定义ext-spring.xml。只需取出原始课程,将其复制到包docroot/WEB-INF/ext-impl/src
中的com.liferay.portal.security.ldap
并进行更改即可。不要创建CustomPortalLDAPImporterImpl.java
答案 1 :(得分:0)
说明中的某些内容听起来不对 - 特别是ext-plugin和
的组合
- 构建并推出我的插件
- 从dist文件夹复制customLdap-ext.war文件并将其粘贴到我的tomcat delpoy文件夹中
醇>
虽然这是documented as the steps to deploy in production,但您至少需要重启Liferay(ext不可热部署)。
另外,验证WAR文件不会最终作为tomcat中的单独Web应用程序。相反,它将被编入Liferay,即ROOT Web应用程序。这是您可以/应该验证的另一件事。并观察重新部署的文档化步骤(与首次部署不同),您基本上需要从头开始重新安装Liferay和ext插件。
如果你能在这里没有分机,我还没有得到验证,记录下来的步骤是尽可能没有分机的主要原因。
如果您在此问题的其他答案中遵循Klimiuk的建议,请注意在这种情况下您依赖于类加载器顺序:某些JVM / appservers将首先获取您的实现,而其他JVM / appservers将接收原来的第一个。它通常是可再现的 - 例如如果它工作一次,它将永远工作。至少在您的环境更新改变行为之前,您突然想知道为什么您的修改不再起作用(如果您很幸运能够快速找到)。