2009-09-17 11 views
6

Poniższy kod jest do uwierzytelniania do serwera Windows AD, używając Java + Kerberos i działa w porządku-Reload config Kerberos w JAVA, bez ponownego uruchamiania JVM

public class KerberosAuthenticator { 
    public static void main(String[] args) { 
    String jaasConfigFilePath = "/myDir/jaas.conf"; 

    System.setProperty("java.security.auth.login.config", jaasConfigFilePath); 

    String krb5ConfigFilePath = "/etc/krb5/krb5.conf"; 
    System.setProperty("java.security.krb5.conf", krb5ConfigFilePath); 

    boolean success = auth.KerberosAuthenticator.authenticate("testprincipal", "testpass"); 

    System.out.println(success); 
} 
} 

Powyższe jest tylko program testowy. Rzeczywisty kod będzie działał w webappie tomcat. Problemem, który napotykam, jest to, że jeśli plik krb5.conf ulegnie zmianie, to samo nie zostanie odzwierciedlone w tomcat, jeśli udane uwierzytelnienie już się zdarzyło raz z wcześniejszą wersją pliku krb5.conf. Nowe zmiany odzwierciedlają tylko ponowne uruchomienie tomcat.

Chcę wiedzieć, czy istnieje sposób na określenie JVM do ponownego załadowania pliku krb5.conf, aby uzyskać najnowsze zmiany bez restartowania maszyny JVM.

+0

Jaka jest twoja zmienna 'auth'? Jest niezdefiniowany. –

+0

Cóż, to tylko fragment kodu. "Auth" odnosi się do pakietu, który ma klasę "KerberosAuthenticator". – Keshav

+0

Dzięki, rozumiem teraz! Szukałem fragmentu do ponownego użycia do logowania Kerberosa, ale chyba nie mogę go użyć, jeśli KerberosAuthenticator jest niestandardowym kodem. –

Odpowiedz

5

OK, rozwiązałem ten.

refreshKrb5Config = true należy ustawić dla KRB5LoginModule w pliku jaas.conf.

Powiązane problemy