EN · DE · RU · FR · ES

#511: LdapUtils.java

projectforge-business/src/main/java/org/projectforge/business/ldap/LdapUtils.java Tipo: Java · Rol: Integración LDAP · Fuente: projectforge-business/src/main/java/org/projectforge/business/ldap/LdapUtils.java 334 líneas · 262 código · 48 comentarios · 24 en blanco
Métodos de utilidad estáticos para LDAP. Colección de funciones puras sin efectos secundarios, que proporcionan operaciones auxiliares comunes.

Estructura del código

Paquete: org.projectforge.business.ldap

Clases: LdapUtils

Métodos (17): encodeForLDAP, encodeForLDAP, escapeCommonName, getOu, getOu, buildOu, buildOu, appendOu, getOrganizationalUnit, getOrganizationalUnit, getAttributeValue, getAttributeStringValue, getAttributeIntegerValue, putAttribute, splitMultipleAttribute, getMissedObjectClasses, addEntry

Campos (1): ATTRIBUTE_SEPARATOR_CHAR

Importaciones: 8 paquetes

Código fuente (resumido)

package org.projectforge.business.ldap;

import org.apache.commons.lang3.StringUtils;
import org.projectforge.common.StringHelper;

import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import java.util.ArrayList;
import java.util.List;

/**
 * @author Kai Reinhard (k.reinhard@micromata.de)
 */
public class LdapUtils
{
  private static final String ATTRIBUTE_SEPARATOR_CHAR = ",";

  // https://github.com/ESAPI/esapi-java-legacy/blob/develop/src/main/java/org/owasp/esapi/reference/DefaultEncoder.java
  public static String encodeForLDAP(String input) {
    return encodeForLDAP(input, true);
  }

  /**
   * '\' -> "\5c", '(' -> "\\28", ')' -> "\\29", '\0' -> "\00"
   * Si encodeWildcards == true: '*' -> "\2a"
   * @param input
   * @param encodeWildcards El valor predeterminado es true
   * @return cadena de entrada codificada.
   * https://github.com/ESAPI/esapi-java-legacy/blob/develop/src/main/java/org/owasp/esapi/reference/DefaultEncoder.java
   */
  public static String encodeForLDAP(String input, boolean encodeWildcards) {
    if (input == null) {
      return null;
    }
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < input.length(); i++) {
      char c = input.charAt(i);

      switch (c) {
        case '\\':
          sb.append("\\5c");
          break;
        case '*':
          if (encodeWildcards) {
            sb.append("\\2a");
          } else {
            sb.append(c);
          }

          break;
        case '(':
          sb.append("\\28");
          break;
        case ')':
          sb.append("\\29");
          break;
        case '\0':
          sb.append("\\00");
          break;
        default:
          sb.append(c);
      }
    }
    return sb.toString();
  }

  /**
   * Escapa los siguientes caracteres: , (coma), = (igual), + (más), < (menor que), > (mayor que), # (signo de número), ; (punto y coma), \
   * (barra invertida) y " (comillas).
   * @param name
   * @return null si name es nulo, de lo contrario la cadena name con caracteres especiales escapados.
   */
  public static String escapeCommonName(final String name)
  {
    if (name == null) {
      return null;
    }
    final StringBuilder buf = new StringBuilder(name.length() + 5);
    for (int i = 0; i < name.length(); i++) {
      final char ch = name.charAt(i);
      if (",=+<>#;\\\"".indexOf(ch) >= 0) {
        buf.append("\\");
      }
      buf.append(ch);
    }
    return buf.toString();
  }

  public static String getOu(final String... organizationalUnits)
  {
    if (organizationalUnits == null) {
      return "";
    }
    if (organizationalUnits.length == 1 && organizationalUnits[0] != null && organizationalUnits[0].startsWith("ou=")) {
      // organizationalUnit ya está en la forma ou=...,ou=.... No hay nada que hacer.
      return organizationalUnits[0];
    }
    final StringBuilder buf = new StringBuilder();
    buildOu(buf, null, organizationalUnits);
    return buf.toString();
  }

  public static String getOu(final String ou, final String[] organizationalUnits)
  {
    final StringBuilder buf = new StringBuilder();
    buildOu(buf, ou, organizationalUnits);
    return buf.toString();
  }

  public static void buildOu(final StringBuilder buf, final String ou, final String[] organizationalUnits)
  {
    if (ou == null && organizationalUnits == null) {
      return;
    }
    boolean first = true;
    if (ou != null) {
      first = false;
// ... (truncado, total 312 líneas)

Historial de Git

868d6abb7 2025 -> 2026
63081666f Encabezados de archivos fuente: 2024-> 2025.
a72903e36 *.java, *.kt: StringBuffer -> StringBuilder.
b6092df09 Copyright 2023 -> 2024
ab45d51fa Copyright 2001-2022 -> 2001-2023.