我想指向一个不同的 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;
};
Run Code Online (Sandbox Code Playgroud)
我refreshKrb5Config=true出于显而易见的原因进行了设置,因为我想重新加载 krb 配置文件。
这是我试图执行的代码:package 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" , …Run Code Online (Sandbox Code Playgroud) 我有一个接受 Principal 的 Spring API 服务。
public ResponseEntity<ApiCustomResponse> create(Principal principal, UrlInfoData urlinfo) throws ApiException;
Run Code Online (Sandbox Code Playgroud)
Principal 由 Spring 为 OAuth2 API 调用自动创建。我想为网页管理界面使用相同的服务。
@Autowired
private IShortUrlService apiService;
...
Principal principal = new Principal();
apiService.create(principal, urlinfo);
Run Code Online (Sandbox Code Playgroud)
我想用当前登录的管理员用户名实例化主体。但是,不推荐使用所有实例化类。如何实例化主体以传递给服务?
https://docs.oracle.com/javase/8/docs/api/java/security/Principal.html
当我尝试在 java gwt 中编译时,它显示以下问题
注意:使用 gwt 2.0 java 6 (jre 1.6) 的版本也在 1.8 中尝试过
public static String EncryptPassowrd(String password)
{
String encryptedPassword = "";
byte[] actualBytes = password.toString().getBytes();
byte[] newbytes = new byte[actualBytes.length * 2];
for (int i = 0; i < actualBytes.length; i++)
{
newbytes[2 * i] = actualBytes[i];
newbytes[2 * i + 1] = 0;
}
try
{
MessageDigest md = MessageDigest.getInstance("SHA-1");
md.reset();
md.update(newbytes);
byte[] encryptedbytes = md.digest();
for (int i …Run Code Online (Sandbox Code Playgroud)