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

时间:2017-08-30 14:12:58

标签: java ldap liferay liferay-6

我需要覆盖portalLDAPImporterImpl.java addUser()方法,以便在从LDAP导入用户并添加到Liferay后执行某些操作。我按照这些步骤(Eclipse环境):

  1. 创建Ext插件项目名称customLdap;
  2. docroot / WEB-INF / ext-impl / src 中,我创建了一个包名 com.liferay.portal.security.ldap
  3. 在那里,我创建了扩展 portalLDAPImporterImpl.java CustomPortalLDAPImporterImpl.java 类,并覆盖方法 addUser
  4. 代码提取:

        @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. docroot / WEB-INF / ext-impl / src

    2. 中创建的文件夹名称 META-INF
    3. META-INF 中创建了一个名为ext-spring.xml的文件,其中包含以下代码:

    4. enter image description here

      1. 构建并发布我的插件
      2. 从dist文件夹复制customLdap-ext.war文件并将其粘贴到我的Tomcat部署文件夹中
      3. 启动我的服务器加载旧配置时从ldap
      4. 导入新用户时不打印任何日志

        这样做我错在哪里?

        注意:我使用的是liferay 6.2.0.1 CE-GA6

2 个答案:

答案 0 :(得分:1)

我也覆盖了PortalLDAPImporterImpl.java。您不必定义ext-spring.xml。只需取出原始课程,将其复制到包docroot/WEB-INF/ext-impl/src中的com.liferay.portal.security.ldap并进行更改即可。不要创建CustomPortalLDAPImporterImpl.java

答案 1 :(得分:0)

说明中的某些内容听起来不对 - 特别是ext-plugin和

的组合
  
      
  1. 构建并推出我的插件
  2.   
  3. 从dist文件夹复制customLdap-ext.war文件并将其粘贴到我的tomcat delpoy文件夹中
  4.   

虽然这是documented as the steps to deploy in production,但您至少需要重启Liferay(ext不可热部署)。

另外,验证WAR文件不会最终作为tomcat中的单独Web应用程序。相反,它将被编入Liferay,即ROOT Web应用程序。这是您可以/应该验证的另一件事。并观察重新部署的文档化步骤(与首次部署不同),您基本上需要从头开始重新安装Liferay和ext插件。

如果你能在这里没有分机,我还没有得到验证,记录下来的步骤是尽可能没有分机的主要原因。

如果您在此问题的其他答案中遵循Klimiuk的建议,请注意在这种情况下您依赖于类加载器顺序:某些JVM / appservers将首先获取您的实现,而其他JVM / appservers将接收原来的第一个。它通常是可再现的 - 例如如果它工作一次,它将永远工作。至少在您的环境更新改变行为之前,您突然想知道为什么您的修改不再起作用(如果您很幸运能够快速找到)。