我在JBoss 7上的JAAS中有自定义登录模块,它使用自定义CallbackHandler并实现额外的回调。登录模块的片段:
Callback[] callbacks = new Callback[3];
callbacks[0] = new javax.security.auth.callback.NameCallback(...);
callbacks[1] = new javax.security.auth.callback.PasswordCallback(...);
callbacks[2] = new MyOwnCallback(...);
callbackHandler.handle(callbacks);
要在登录后获取完整信息,aplication需要使用支持MyOwnCallback的MyOwnCallbackHandler。是否可以使用内置的JBoss回调处理程序启用某些基本应用程序的登录,即org.jboss.security.auth.callback.UsernamePasswordHandler而不包括MyOwnCallbackHandler?避免UnsupportedCallbackException的一种可能方法是使用以下方法扩展UsernamePasswordHandler:
@Override
public void handle(Callback[] callbacks) throws UnsupportedCallbackException {
ArrayList<Callback> supportedCallbacks = new ArrayList<Callback>(callbacks.length);
for (Callback c : callbacks) {
if (c instanceof NameCallback || c instanceof PasswordCallback) {
supportedCallbacks.add(c);
}
}
super.handle((Callback[]) supportedCallbacks.toArray(new Callback[supportedCallbacks.size()]));
}
但我不想在每个应用程序中实现它或包含任何其他jar。