2013-10-08 18 views
1

我目前正在使用ProgrammaticLogin來針對服務器對客戶端用戶進行身份驗證的客戶端服務器應用程序。 Glassfish設置了默認領域,通過ActiveDirectory進行身份驗證。我們最近將lightboxfish的版本從3.0.1升級到3.1.2.2,現在我們遇到了一個奇怪的錯誤:經過一段時間的運行,看似隨機,默認安全領域更改爲file,而不是ActiveDirectory -realm!不用說,這會抑制人們從客戶端登錄的能力。當glassfish重新啓動時,它會再次開始工作,正確使用ActiveDirectory -real進行身份驗證。Glassfish 3.1.2.2在一段時間後將其默認登錄域更改爲

有沒有人知道可能會導致這種行爲從Glassfish?它可能是從AD -realm或其他東西斷開?從錯誤之後的堆棧跟蹤

摘錄生效:

Programmatic login failed 
com.sun.enterprise.security.auth.login.common.LoginException: Login failed: Failed file login for me. 
    at com.sun.enterprise.security.auth.login.LoginContextDriver.doPasswordLogin(LoginContextDriver.java:394) 
    at com.sun.enterprise.security.auth.login.LoginContextDriver.login(LoginContextDriver.java:240) 
    at com.sun.enterprise.security.auth.login.LoginContextDriver.login(LoginContextDriver.java:153) 
    at com.sun.appserv.security.ProgrammaticLogin$1.run(ProgrammaticLogin.java:174) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.appserv.security.ProgrammaticLogin.login(ProgrammaticLogin.java:168) 
    at com.sun.appserv.security.ProgrammaticLogin.login(ProgrammaticLogin.java:239) 
    at com.sun.appserv.security.ProgrammaticLogin.login(ProgrammaticLogin.java:211) 
    [...] 
Caused by: javax.security.auth.login.LoginException: Failed file login for me. 
    at com.sun.enterprise.security.auth.login.FileLoginModule.authenticate(FileLoginModule.java:84) 
    at com.sun.enterprise.security.auth.login.PasswordLoginModule.authenticateUser(PasswordLoginModule.java:117) 
    at com.sun.appserv.security.AppservPasswordLoginModule.login(AppservPasswordLoginModule.java:143) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at javax.security.auth.login.LoginContext.invoke(LoginContext.java:784) 
    at javax.security.auth.login.LoginContext.access$000(LoginContext.java:203) 
    at javax.security.auth.login.LoginContext$4.run(LoginContext.java:698) 
    at javax.security.auth.login.LoginContext$4.run(LoginContext.java:696) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:695) 
    at javax.security.auth.login.LoginContext.login(LoginContext.java:594) 
    at com.sun.enterprise.security.auth.login.LoginContextDriver.doPasswordLogin(LoginContextDriver.java:382) 

回答

0

在我們的測試環境中的一個(奇怪的是,它發生在幾乎在3度不同的環境的同時,與發生錯誤後3個不同的ldaps),我能夠調試並接近解決方案。

首先,我們檢查了錯誤發生時domain.xml中的默認領域,它仍然指向我們的AD領域,而不是文件。

當調試器玩耍,下面試圖用文件登錄後給了一個例外:

new ProgrammaticLogin().login(username, password); 
new ProgrammaticLogin().login(username, password, "default", true); 

這兩者是等價的,都離開它的服務器來確定默認的境界是什麼。當指定AD-境界,我想反對,另一方面驗證的名稱,它的工作就像一個魅力:

new ProgrammaticLogin().login(username, password, "myRealm", true); 

如此看來,我們在Glassfish的3.1.2.2中的錯誤,這使得GlassFish的困惑至於什麼是默認的登錄領域。

作爲一個側面說明(或兩個),對於兩個受影響的環境,幾分鐘後問題就解決了。此外,只要進入glassfish管理控制檯,並將默認領域更改爲文件,然後返回到AD-realm,也可以解決問題。 (可能只是保存頁面會產生同樣的效果。)

+0

有趣。我們一直在開發Glassfish 3.1.2.2以及生產超過一年,沒有任何問題。我們使用自定義的數據庫領域。你確定你的領域始終沒有問題的初始化? – Mareen