2010-12-02 73 views
1

我在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地址,那將提供一個適當的解決方法。

我很困惑它爲什麼會通過一個協議,而不是其他工作。其他人看過這種行爲還是知道如何處理?

感謝, 託德

+0

任何機會我們可以看到代碼和異常stacktrace? – 2010-12-02 18:02:49

回答

0

在WebLogic中,化ContextHandlerCallback僅對HTTP請求的servlet定義。

通過實現ConnectionFilter/ConnectionEvent接口,可以在所有協議(HTTP,RMI-IIOP,...)上訪問調用者的IP地址。您可以使用它們根據IP地址記錄或拒絕請求。