gpt4 book ai didi

java - 使用 "java.security.krb5.conf"System.property() 更新 kerberors krb.conf 文件不起作用

转载 作者:行者123 更新时间:2023-12-04 11:35:40 31 4
gpt4 key购买 nike

我想指向一个 不同的 krb.conf 文件 , dynamically, without restarting the JVM .我在 Stackoverflow 上搜索了不同的解决方案,并尝试相应地实现该解决方案。但有些方法,甚至 如果我更新 System.property("java.security.krb5.conf", ...) 指向the new krb.conf file ,JAAS 无法理解这一点,并且仍在使用早期的 conf 文件。以下是我使用代码的解决方案的详细信息:
我的 Jaas.conf 文件如下:

   Mutual {
com.sun.security.auth.module.Krb5LoginModule required client=TRUE;
};
sp.kerb.sso.KinitExample {
com.sun.security.auth.module.Krb5LoginModule required
client=TRUE
refreshKrb5Config=true
debug=true;
};
我已经设置了 refreshKrb5Config=true出于显而易见的原因,因为我想重新加载 krb 配置文件。
这是我试图执行的代码:
包 sp.kerb.sso;
import sun.security.krb5.internal.tools.Kinit;

public class KinitExample {

public static void main(String[] args) {

String kerberosFileName = "C:\\Windows\\krb5.ini";
String jaas_config_file_name = "C:\\Users\\User1\\temp\\howrah.jaas.conf";

System.setProperty("java.security.auth.login.config", jaas_config_file_name); // setting the jaas config file
System.setProperty("java.security.krb5.conf" , kerberosFileName); // setting the kerberos file
System.setProperty("java.security.krb5.debug" , "true");

final String administrator = "admin@exampledomain.lab".toUpperCase();
String cacheFileLoc = "C:\\Users\\User1\\temp\\admin.cache";

// Perfoming Kinit ...
Kinit.main(new String[]{"-c",cacheFileLoc, administrator , "Password123" });

kerberosFileName = "C:\\Users\\User2\\temp\\new.krb.conf"; // Using new KRB configuration file

System.setProperty("java.security.krb5.debug" , "true");
System.setProperty("java.security.auth.login.config", jaas_config_file_name); // setting the property again

System.setProperty("java.security.krb5.conf" , kerberosFileName); // setting the property again

System.out.println(System.getProperty("java.security.krb5.conf")); // Prints the updated conf file location.

cacheFileLoc = "C:\\Users\\User2\\temp\\newadmin.cache";
String newAdmin = "administrator@test.lab".toUpperCase();
Kinit.main(new String[]{"-c",cacheFileLoc, newAdmin , "Password123" });
}
}
admin 的缓存是 已创建 ,但缓存为 newAdmin不是 已创建 因为相应的 krb.conf 文件具有不同的领域并且 JAAS 似乎无法从 连接到领域new.krb.conf 因此失败并显示臭名昭著的 906 错误代码。
我做错了什么?我想要达到的目标是可能的吗?我应该如何解决这个问题?

另请注意,如果我完全评论管理缓存创建逻辑并从 new.krb.conf(与 newAdmin 相关的所有代码)开始,它运行良好并为 newAdmin 创建缓存

最佳答案

您应该拨打 sun.security.krb5.Config.refresh();为了从新文件重新加载配置。

关于java - 使用 "java.security.krb5.conf"System.property() 更新 kerberors krb.conf 文件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65700955/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com