通过 ext 插件对源代码所做的 Liferay 更改没有发生
Liferay changes made to source code through ext plugin are not taking place
我需要覆盖 portalLDAPImporterImpl.java
addUser()
方法以在用户从 LDAP 导入并添加到 Liferay 后执行某些操作。我遵循了这些步骤(Eclipse 环境):
- 已创建 Ext 插件项目名称 customLdap;
- 在docroot/WEB-INF/ext-impl/src我创建了一个包名com.liferay.portal.security.ldap
- 在那里我创建了我的 CustomPortalLDAPImporterImpl.java class 扩展 portalLDAPImporterImpl.java 并覆盖方法 添加用户
代码摘录:
@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;
}
已在 docroot/WEB-INF/ext-impl/src
[=47 中创建文件夹名称 META-INF =]
在 META-INF 中创建了一个名为 ext-spring.xml 的文件,代码如下:
- 构建并发布我的插件
- 从 dist 文件夹中复制了 customLdap-ext.war 文件并将其粘贴到我的 Tomcat 部署文件夹中
- 启动我的服务器,加载旧配置,从 ldap 导入新用户时没有打印日志
这样做哪里出错了?
注意:我使用的是liferay 6.2.0.1 CE-GA6
我也覆盖了PortalLDAPImporterImpl.java
。您不必定义 ext-spring.xml。就拿原来的class,复制到包com.liferay.portal.security.ldap
里的docroot/WEB-INF/ext-impl/src
改一下。不创建 CustomPortalLDAPImporterImpl.java
您的描述中有些地方听起来不对 - 特别是 ext-plugin 和
的组合
- build and pusblished my plugin
- copied the customLdap-ext.war file from dist folder and pasted it in my tomcat delpoy folder
虽然这是 documented as the steps to deploy in production,但您至少需要重新启动 Liferay(ext 不可热部署)。
此外,验证 WAR 文件 不会 在 tomcat 中作为单独的 Web 应用程序结束。相反,它将被编织到 Liferay 中,也就是 ROOT 网络应用程序。这是您 can/should 验证的另一件事。并观察记录的重新部署步骤(与第一次部署不同),您基本上需要从头开始重新安装 Liferay 和您的 ext 插件。
我在这里没有验证你是否可以不使用 ext,记录的步骤是尽可能不使用 ext 的主要原因。
如果您遵循 Klimiuk 在该问题的另一个答案中的建议,请注意在这种情况下您依赖于类加载器的顺序:一些 JVMs/appservers 将首先选择您的实现,而其他人将选择原始的第一个。它通常是可重现的 - 例如如果它一次有效,它将永远有效。至少在您的环境更新改变行为之前,您突然想知道为什么您的修改不再起作用(如果您幸运地快速发现)。
我需要覆盖 portalLDAPImporterImpl.java
addUser()
方法以在用户从 LDAP 导入并添加到 Liferay 后执行某些操作。我遵循了这些步骤(Eclipse 环境):
- 已创建 Ext 插件项目名称 customLdap;
- 在docroot/WEB-INF/ext-impl/src我创建了一个包名com.liferay.portal.security.ldap
- 在那里我创建了我的 CustomPortalLDAPImporterImpl.java class 扩展 portalLDAPImporterImpl.java 并覆盖方法 添加用户
代码摘录:
@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;
}
已在 docroot/WEB-INF/ext-impl/src
[=47 中创建文件夹名称 META-INF =]在 META-INF 中创建了一个名为 ext-spring.xml 的文件,代码如下:
- 构建并发布我的插件
- 从 dist 文件夹中复制了 customLdap-ext.war 文件并将其粘贴到我的 Tomcat 部署文件夹中
- 启动我的服务器,加载旧配置,从 ldap 导入新用户时没有打印日志
这样做哪里出错了?
注意:我使用的是liferay 6.2.0.1 CE-GA6
我也覆盖了PortalLDAPImporterImpl.java
。您不必定义 ext-spring.xml。就拿原来的class,复制到包com.liferay.portal.security.ldap
里的docroot/WEB-INF/ext-impl/src
改一下。不创建 CustomPortalLDAPImporterImpl.java
您的描述中有些地方听起来不对 - 特别是 ext-plugin 和
的组合
- build and pusblished my plugin
- copied the customLdap-ext.war file from dist folder and pasted it in my tomcat delpoy folder
虽然这是 documented as the steps to deploy in production,但您至少需要重新启动 Liferay(ext 不可热部署)。
此外,验证 WAR 文件 不会 在 tomcat 中作为单独的 Web 应用程序结束。相反,它将被编织到 Liferay 中,也就是 ROOT 网络应用程序。这是您 can/should 验证的另一件事。并观察记录的重新部署步骤(与第一次部署不同),您基本上需要从头开始重新安装 Liferay 和您的 ext 插件。
我在这里没有验证你是否可以不使用 ext,记录的步骤是尽可能不使用 ext 的主要原因。
如果您遵循 Klimiuk 在该问题的另一个答案中的建议,请注意在这种情况下您依赖于类加载器的顺序:一些 JVMs/appservers 将首先选择您的实现,而其他人将选择原始的第一个。它通常是可重现的 - 例如如果它一次有效,它将永远有效。至少在您的环境更新改变行为之前,您突然想知道为什么您的修改不再起作用(如果您幸运地快速发现)。