解密/修改Tomcat Server.xml文件中Realm标签的密码 - LDAP

问题描述 投票:0回答:1

我尝试扩展 JNDIRealm 类,通过重写 getPassword() 方法,然后使用 getConnectionPassword 方法,首先打印/获取连接密码。但是,它不起作用并且出现不同的错误集。

要求: 在 Tomcat 9 的 server.xml 文件的领域标签中动态解密密码。我可以使用 BasicDataSourceFactory 对资源标签执行此操作,但不能对领域标签执行此操作。 注意:我不需要解密逻辑,只是打印当前连接密码并替换为解密密码的基本功能。

Server.xml 中的 Realm 标记下方

***<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"/>***

下面是正在编译成 JAR 文件并粘贴到 Tomcat/lib 文件夹中的 Java 类。

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; 
}
}

错误: 现在我收到诸如未配置 CredentialHandler 和 SetPropetiesRule.begin Match 之类的 JointRealm 错误。无法为领域标记内的所有属性设置属性。

注意:这是基于供应商的应用程序,我们无法控制应用程序代码。只有我们可以控制 Tomcat,并且我们需要在 Realm 标记中的 LDAP 连接中实现密码屏蔽。

java tomcat jar tomcat9 server.xml
1个回答
0
投票

这就是答案,它是通过重写 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); 
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.