それが可能だ。たとえば、各構成を個別のファイルに格納し、各構成の開始時に Java パスを krb5.ini および login.conf ファイルに渡すことができます。
boolean loginSuccess = false;
try
{
System.setProperty("java.security.krb5.conf", "C:\kerb\conf1\krb5.ini");
System.setProperty("java.security.auth.login.config", "C:\kerb\conf1\login.conf");
// in login.conf you can have defined path to keytab for this configuration
LoginContext lc = new LoginContext(...);
//Try Realm 1
lc.login();
loginSuccess = true;
}
catch(LoginException le)
{
try
{
System.setProperty("java.security.krb5.conf", "C:\kerb\conf2\krb5.ini");
System.setProperty("java.security.auth.login.config", "C:\kerb\conf2\login.conf");
// in login.conf you can have defined path to keytab for this configuration
LoginContext lc2 = new LoginContext(...);
//Try Realm 2
lc2.login();
loginSuccess = true;
}
catch(LoginException le)
{
//...
}
}
return loginSuccess;
これら 2 つのシステム プロパティについては、http://docs.oracle.com/javase/7/docs/technotes/guides/security/jgss/tutorials/LoginConfigFile.html および http://docs.oracle.com/javase/ で説明して
います
。 7/docs/technotes/guides/security/jgss/tutorials/KerberosReq.html
もう 1 つの可能性は、ファイルを使用しない構成です。CallbackHandler (ここではユーザー名とパスワードを渡します) と Configuration (ここでは login.conf にあるパラメーターを渡します) を取る LoginContext コンストラクターがあります。Kdc およびレルムは、システム プロパティ java.security.krb5.realm および java.security.krb5.kdc で渡すことができます。
http://docs.oracle.com/javase/8/docs/api/javax/security/auth/login/LoginContext.html#LoginContext-java.lang.String-javax.security.auth.Subject-javax.security. auth.callback.CallbackHandler-javax.security.auth.login.Configuration-