通过ext插件对源代码进行的Liferay更改不会发生

问题描述:

我需要覆盖portalLDAPImporterImpl.javaaddUser()方法以在从LDAP导入用户并将其添加到Liferay后执行某些操作。我遵循这些步骤(Eclipse环境):通过ext插件对源代码进行的Liferay更改不会发生

  1. 创建Ext插件项目名称customLdap;
  2. 文档根目录/ WEB-INF/EXT-IMPL/src目录我创建了一个包名com.liferay.portal.security.ldap
  3. 在那里,我创造我CustomPortalLDAPImporterImpl.java类扩展portalLDAPImporterImpl。的java并重写方法ADDUSER

代码提取物:

@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; 
} 
  1. 创建文件夹名称META-INF文档根/ WEB-INF/EXT-IMPL/SRC

  2. META-INF创建的文件命名为EXT-spring.xml用下面的代码:

  3. enter image description here

    1. 构建和发布我的插件
    2. 复制从DIST文件夹中的customLdap-ext.war文件,并在我的Tomcat粘贴它部署文件夹
    3. 开始了我的服务器的旧配置加载任何日志打印而新用户从进口ldap
    4. 我在哪里做错了?

      注:我使用的Liferay 6.2.0.1 CE-GA6

    开始=>
开始=>
+0

6.2.0.1 CE-GA6?你从哪里得到的 - 从原始资料来看,它不存在。 6.2.5将是匹配“GA6”的版本,6.2.0是GA1。我从来没有听说过6.2.0.1 –

我也重写PortalLDAPImporterImpl.java。您不必定义ext-spring.xml。只需参加原班级,将其复制到docroot/WEB-INF/ext-impl/src的包com.liferay.portal.security.ldap并更改它。不要在你的描述中创建CustomPortalLDAPImporterImpl.java

+0

确实如你所说,但仍然没有反映出 –

+0

而在ext部署后,你重新启动服务器?还取消部署并删除旧分机的剩菜。 –

+0

我也是这样做的 –

东西不健全的权利 - 一个Ext-插件的具体组合和

  1. 构建和pusblished我的插件
  2. 复制从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会首先获取您的实现,而另一些则会首先获取原始实现。它通常具有可再现性 - 例如如果它工作一次,它会一直工作。至少在你的环境更新改变行为之前,你突然想知道为什么你的修改不再有效(如果你很幸运能迅速找到答案)。