Combination View Flat View Tree View
Threads [ Previous | Next ]
Diego Silva
Error encontrado en updateUser() usando LDAP
March 21, 2012 2:00 PM
Answer

Diego Silva

Rank: Junior Member

Posts: 33

Join Date: June 16, 2010

Recent Posts

Saludos

El presente Thread es para reportar un error que encontré (y corregí con un ext) en el LF 6.1 cuando se utiliza LDAP.

Estos son los pasos que hice para llegar al error:

  1. Configurar LDAP en el LR 6.1
  2. Inicio sesión con un usuario
  3. Cambio los valores de los campos de OpenID, Facebook, Twitter del usuario
  4. Cierro sesión y vuelvo a entrar
  5. Cuando visualizo los datos que puse antes, no aparecen.
  6. Desactivo el LDAP de LR, repito el paso 3 al 5, y los datos aparecen después de iniciar sesión.


Lo que hice para corregir fue crear un ext para UserLocalServiceWrapper con el siguiente codigo:
 1public class ExtUserLocalService extends UserLocalServiceWrapper {
 2//...
 3    @Override
 4    public User updateUser(long userId, String oldPassword,
 5            String newPassword1, String newPassword2, boolean passwordReset,
 6            String reminderQueryQuestion, String reminderQueryAnswer,
 7            String screenName, String emailAddress, long facebookId,
 8            String openId, String languageId, String timeZoneId,
 9            String greeting, String comments, String firstName,
10            String middleName, String lastName, int prefixId, int suffixId,
11            boolean male, int birthdayMonth, int birthdayDay, int birthdayYear,
12            String smsSn, String aimSn, String facebookSn, String icqSn,
13            String jabberSn, String msnSn, String mySpaceSn, String skypeSn,
14            String twitterSn, String ymSn, String jobTitle, long[] groupIds,
15            long[] organizationIds, long[] roleIds,
16            List<UserGroupRole> userGroupRoles, long[] userGroupIds,
17            ServiceContext serviceContext) throws PortalException,
18            SystemException {
19        // TODO Auto-generated method stub
20        Map<String, Serializable> attrs = serviceContext.getAttributes();
21        if (attrs.isEmpty())
22            return super.getUser(userId);
23
24        return super.updateUser(userId, oldPassword, newPassword1,
25                newPassword2, passwordReset, reminderQueryQuestion,
26                reminderQueryAnswer, screenName, emailAddress, facebookId,
27                openId, languageId, timeZoneId, greeting, comments, firstName,
28                middleName, lastName, prefixId, suffixId, male, birthdayMonth,
29                birthdayDay, birthdayYear, smsSn, aimSn, facebookSn, icqSn,
30                jabberSn, msnSn, mySpaceSn, skypeSn, twitterSn, ymSn, jobTitle,
31                groupIds, organizationIds, roleIds, userGroupRoles,
32                userGroupIds, serviceContext);
33    }


Con esto me aseguro que solo si tiene datos el contexto (que justamente tiene los campos recibidos por parámetros) lo actualiza en el ancestro, sino, busca en la base de datos y lo devuelve. Este método solo se ejecuta cuando se inicia la sesión con LDAP. raro, no?