Расшифровать/изменить пароль тега области в файле Server.xml Tomcat — LDAP

Я попытался расширить класс JNDIRealm, чтобы сначала распечатать/получить пароль соединения, переопределив метод getPassword(), а затем используя метод getConnectionPassword. Однако он не работает и выдает другой набор ошибок.

Требование: расшифровать пароль на лету в теге области файла server.xml для Tomcat 9. Я могу сделать это для тега ресурса, используя BasicDataSourceFactory, но не для тега области. Примечание. Мне не нужна логика расшифровки, а только базовые функции для печати текущего пароля соединения и замены его расшифрованным паролем.

Под тегом Realm в Server.xml

***<Valve className = "org.apache.catalina.authenticator.BasicAuthenticator" changeSessionIdOnAuthentication = "false" /> 
<Realm className = "org.test.CustomJNDIRealm"
connectionURL = "ldap://ldap.TEST.com:3268"
authentication = "simple"
referrals = "follow"
connectionName = "SA-TEST-Archival"
connectionPassword = "encrypted_password"
roleSearchAsUser = "false"
userSearch = " (sAMAccountName = {0})"
userBase = "dc-test,dc=com"
userSubtree = "true"
roleSearch" (member = {0})"
roleName = "cn"
roleSubtree = "true"|
roleBase = "OU=Service Accounts, OU=Services, OU=TEST Resources,DC=TEST,DC=com"/>***

Ниже приведен класс Java, который компилируется в файл JAR и вставляется в папку Tomcat/lib.

import org.apache.catalina.realm.JNDIRealm;
import java.security.Principal;
import java.util.List;

public class CustomJNDIRealm extends JNDIRealm {
@Override
protected String getPassword (String username) { 

//String password= super.getPassword (username);
String password = getConnectionPassword();
System.out.println("++++++The current password LDAP Realm Tag "+password);
return password; 
}
}

Ошибка: Теперь я получаю такие ошибки, как «CombinedRealm, не настроенный с помощью CredentialHandler и SetPropetiesRule.begin Match… не удалось установить свойство для всех свойств внутри тега области».

Примечание. Это приложение разработано поставщиком, и мы не можем контролировать код приложения. Только у нас есть контроль над Tomcat, и нам нужно реализовать маскирование пароля при подключении LDAP в теге Realm.

Где вы настроили файл JointRealm. Почему перед объявлением вашего игрового мира стоит элемент Valve? Realm обычно настраивается внутри элемента Engine.

Ironluca 06.04.2024 15:33

Я нигде не настраивал JointRealm. Вот как это настроено в server.xml согласно нашей команде Active Directory. Они предоставили образец, мы поместили его туда, и он начал работать.

phLamBy 07.04.2024 13:03
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот ответ: проблема была решена путем переопределения метода setConnectionPassword, вместо этого я пытался ранее напрямую изменить конструктор и другие методы.

import org.apache.catalina.realm.JNDIRealm;

public class CustomJNDIRealm extends JNDIRealm {
@Override
protected void setConnectionPassword(String connectionPassword) {

    String realmTagPassword = connectionPassword;

    System.out.println(realmTagPassword);

    return super.setConnectionPassword("newPassword); 
    }
}

Другие вопросы по теме