我在Weblogic 10.3中有一个自定义身份验证器,我正在使用并遇到问题。
当用户通过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);
以上是从上方抛出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()期间会抛出异常。
其他一些可能相关或可能不相关的信息,但为什么不包括我能做的所有?
我很困惑为什么它可以通过一种协议而不是另一种协议。其他人看到过这种行为或知道如何处理这个问题?
谢谢, 托德
答案 0 :(得分:0)
在WebLogic中,仅为HTTP servlet请求定义ContextHandlerCallback。
您可以通过实现ConnectionFilter/ConnectionEvent接口访问所有协议(HTTP,RMI-IIOP,...)上的呼叫者的IP地址。您可以使用它们根据IP地址记录或拒绝请求。