public AuthenticationUser validate(String login, String password, String entidad) throws SecurityException, ValidationException { AuthenticationUser user = null; validateParameters(login, password); LDAPAuthenticationUser attributesUser = null; try { LDAPDef ldapDef = RepositoryLDAP.getInstance(entidad).getLDAPInfo(); if (log.isDebugEnabled()) { log.debug("LDAPDef [" + ldapDef + "] con el log [" + log + "]"); } if (ldapDef.getLdapEngine() == 0) { throw new SecurityException(SecurityException.ERROR_AUTHENTICATION_POLICY_NOTFOUND); } // String dn = ldapDef.getLdapUser(); String attrID = LDAPRBUtil.getInstance(null).getProperty(LDAP_ATTRIBUTES + ldapDef.getLdapEngine()); String attributes[] = parseAttributes(attrID); String passwordDecrypt = CryptoUtils.decryptPasswordLDAP(ldapDef.getLdapPassword()); LdapConnection conn = new LdapConnection(); LdapConnCfg ldapConfig = LdapConfigUtils.createLdapConnConfig(ldapDef); ldapConfig.setProvider(1); String dn = ldapConfig.getUser(); conn.open(ldapConfig, dn, passwordDecrypt); LdapSearch search = getSearch(login, conn, ldapDef, attributes); attributesUser = getUserAttributes(search, attributes); attributesUser.setGuidStringFormat(LdapBasicFns.formatGuid(conn, attributesUser.getGuid())); if (log.isDebugEnabled()) { log.debug("attributesUser [" + attributesUser + "] con el log [" + log + "]"); } conn.close(); // se valida al usuario logueado y su contraseña validateUserPassword(ldapDef, attributesUser.getDn(), password); Integer userId = userVerification(attributesUser, entidad); // Integer deptId = connectionVerification(attributesUser, passwordDecrypt, // ldapDef, attributes, entidad); Integer deptId = null; // List deptList = connectionVerification(attributesUser, passwordDecrypt, ldapDef, // attributes, entidad); // obtiene los departamentos del usuario List deptListLDAP = connectionVerification(attributesUser, passwordDecrypt, ldapDef, attributes, entidad); // obtenemos las oficinas del usuario List deptList = getUserDeptList(userId, entidad, deptListLDAP); // obtenemos los ids de los grupos a los que pertenece el usuario List groupList = getListGroupOfUser(attributesUser, passwordDecrypt, ldapDef, attributes, entidad); user = new AuthenticationUser(); if (deptList != null && deptList.size() > 0) { deptId = (Integer) deptList.get(0); user.setDeptList(deptList); } user.setId(userId); user.setName(attributesUser.getFullName()); user.setDeptid(deptId); user.setDeptIdOriginal(deptId); user.setGroupList(groupList); } catch (NamingException e) { throw new SecurityException(SecurityException.ERROR_USER_NOTFOUND); } catch (SecurityException e) { throw e; } catch (Exception e) { throw new SecurityException(SecurityException.ERROR_USER_NOTFOUND); } return user; }
public AuthenticationUser validate(String userDn, String entidad) throws SecurityException, ValidationException { AuthenticationUser user = null; LDAPAuthenticationUser attributesUser = null; LdapConnection conn = new LdapConnection(); try { // String decodedDn = CryptoUtils.getDecodeDn(userDn); String decodedDn = userDn; LDAPDef ldapDef = RepositoryLDAP.getInstance(entidad).getLDAPInfo(); if (log.isDebugEnabled()) { log.debug("LDAPDef [" + ldapDef + "] con el log [" + log + "]"); } if (ldapDef.getLdapEngine() == 0) { throw new SecurityException(SecurityException.ERROR_AUTHENTICATION_POLICY_NOTFOUND); } // String dn = ldapDef.getLdapUser(); String attrID = LDAPRBUtil.getInstance(null).getProperty(LDAP_ATTRIBUTES + ldapDef.getLdapEngine()); String attributes[] = parseAttributes(attrID); String passwordDecrypt = CryptoUtils.decryptPasswordLDAP(ldapDef.getLdapPassword()); LdapConnCfg ldapConfig = LdapConfigUtils.createLdapConnConfig(ldapDef); String dn = ldapConfig.getUser(); ldapConfig.setProvider(1); conn.open(ldapConfig, dn, passwordDecrypt); LdapSearch search = getSearchSSO(decodedDn, conn, ldapDef, attributes); attributesUser = getUserAttributes(search, attributes); attributesUser.setGuidStringFormat(LdapBasicFns.formatGuid(conn, attributesUser.getGuid())); if (log.isDebugEnabled()) { log.debug("attributesUser [" + attributesUser + "] con el log [" + log + "]"); } Integer userId = userVerification(attributesUser, entidad); // Integer deptId = connectionVerification(conn, attributesUser, ldapDef, attributes, // entidad); Integer deptId = null; List groupList = new ArrayList(); List deptList = connectionVerification(conn, attributesUser, ldapDef, attributes, entidad, groupList); // se deja comentado este punto porque es nuevo y soluciona el error detectado con el boton // cambiar oficina por SSO deptList = getUserDeptList(userId, entidad, deptList); user = new AuthenticationUser(); if (deptList != null && deptList.size() > 0) { deptId = (Integer) deptList.get(0); user.setDeptList(deptList); } user.setId(userId); user.setName(attributesUser.getFullName()); user.setDeptid(deptId); user.setGroupList(groupList); return user; } catch (NamingException e) { throw new SecurityException(SecurityException.ERROR_USER_NOTFOUND); } catch (SecurityException e) { throw e; } catch (Exception e) { throw new SecurityException(SecurityException.ERROR_USER_NOTFOUND); } finally { try { conn.close(); } catch (Exception e) { if (log.isDebugEnabled()) { log.debug("Error al cerrar conexión LDAP", e); } } } }