LdapUtils.javaПакет: org.projectforge.business.ldap
Классы: LdapUtils
Методы (17): encodeForLDAP, encodeForLDAP, escapeCommonName, getOu, getOu, buildOu, buildOu, appendOu, getOrganizationalUnit, getOrganizationalUnit, getAttributeValue, getAttributeStringValue, getAttributeIntegerValue, putAttribute, splitMultipleAttribute, getMissedObjectClasses, addEntry
Поля (1): ATTRIBUTE_SEPARATOR_CHAR
Импорты: 8 пакетов
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"
* Если encodeWildcards == true: '*' -> "\2a"
* @param input
* @param encodeWildcards По умолчанию true
* @return закодированная входная строка.
* 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();
}
/**
* Экранирует следующие символы: , (запятая), = (равно), + (плюс), < (меньше), > (больше), # (знак номера), ; (точка с запятой), \
* (обратная косая черта) и " (кавычка).
* @param name
* @return null, если name равен null, иначе строка name с экранированными специальными символами.
*/
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 уже в форме ou=...,ou=.... Ничего делать не нужно.
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;
// ... (сокращено, всего 312 строк)
868d6abb7 2025 -> 2026 63081666f Заголовки исходных файлов: 2024-> 2025. a72903e36 *.java, *.kt: StringBuffer -> StringBuilder. b6092df09 Авторские права 2023 -> 2024 ab45d51fa Авторские права 2001-2022 -> 2001-2023.