我在Weblogic 10.3中使用了一個自定義的身份驗證器,它有問題。JMX-RMI/T3連接導致CallbackHandler拋出異常,並且出現ContextHandlerCallback
當用戶連接並通過HTTP進行身份驗證時,一切正常。但是,如果連接是JMX-RMI/T3連接,則會調用javax.security.auth.callback.CallbackHandler.handle
引發異常。正在使用ContextHandlerCallback
默認構造函數,並使用用戶名和密碼回調在回調數組中傳遞。下面是其中的callbackHandler是javax.security.auth.callback.CallbackHandler
callbacks = new Callback[2];
callbacks[0] = new NameCallback("username: ");
callbacks[1] = new PasswordCallback("password: ", false);
callbacks[2] = new ContextHandlerCallback();
callbackHandler.handle(callbacks);
下面的代碼是excetption頂部從上面被拋出來的callbackHandler.handle(callbacks)
點:
javax.security.auth.callback.UnsupportedCallbackException: [Security:090175]Unrecognized Callback
at weblogic.security.SimpleCallbackHandler.handle(SimpleCallbackHandler.java:71)
at com.bea.common.security.internal.service.CallbackHandlerWrapper.handle(CallbackHandlerWrapper.java:76)
at weblogic.security.service.internal.WLSJAASLoginServiceImpl$CallbackHandlerWrapper.handle(WLSJAASLoginServiceImpl.java:156)
at javax.security.auth.login.LoginContext$SecureCallbackHandler$1.run(LoginContext.java:955)
at javax.security.auth.login.LoginContext$SecureCallbackHandler.handle(LoginContext.java:951)
這裏有另外一個異常跟蹤,我們是眼看還有:
javax.security.auth.callback.UnsupportedCallbackException: Unrecognized Callback
at weblogic.management.mbeanservers.internal.JMXAuthenticator$JMXCallbackHandler.handle(JMXAuthenticator.java:130)
at com.bea.common.security.internal.service.CallbackHandlerWrapper.handle(CallbackHandlerWrapper.java:76)
at weblogic.security.service.internal.WLSJAASLoginServiceImpl$CallbackHandlerWrapper.handle(WLSJAASLoginServiceImpl.java:156)
at javax.security.auth.login.LoginContext$SecureCallbackHandler$1.run(LoginContext.java:955)
at javax.security.auth.login.LoginContext$SecureCallbackHandler.handle(LoginContext.java:951)
值得一提的,如果用戶進行身份驗證通過JMX/T3連接,而這將引發異常HTTP工作得很好。
我們試圖實現的一部分是捕獲有關身份驗證的信息,例如請求源自的IP地址,這就是爲什麼我們需要ContextHandlerCallback
。我可以看到,試圖從JMX-RMI/T3連接檢索HttpServletRequest
可能會導致問題,但在javax.security.auth.callback.CallbackHandler.handle()期間會引發異常。
其他一些信息可能相關,也可能不相關,但爲什麼不包括所有我可以?
- 應用程序正在使用基於表單的身份驗證,就像WS調用一樣,但JMX-RMI/T3調用可能不會。
- 不確定是否可以在驗證時定義用於CallbackHandler的實現。目前我們已經定義了一個自定義的LoginModule,但不是自定義的CallbackHandler。
- 如果在ContextHandlerCallback之外有辦法訪問LoginModule內部的調用者的IP地址,那將提供一個適當的解決方法。
我很困惑它爲什麼會通過一個協議,而不是其他工作。其他人看過這種行爲還是知道如何處理?
感謝, 託德
任何機會我們可以看到代碼和異常stacktrace? – 2010-12-02 18:02:49