我的总体目标是在通过联邦身份验证器登录时观察成功和失败的登录尝试,但不适用于本地身份验证器?
对于我的本地身份验证器,我编写了一个扩展JDBCUserStoreManager的自定义辅助用户存储管理器,它运行正常。我想观察认证的结果。为此,我在OSGi容器中注册了一个UserOperationEventListener:
ctxt.getBundleContext().registerService(UserOperationEventListener.class.getName(), new FcUserOperationEventListener(), null);
然后实施如下:
public class FcUserOperationEventListener extends AbstractUserOperationEventListener {
@Override
public boolean doPostAuthenticate(final String userName, final boolean authenticated,
final UserStoreManager userStoreManager) throws UserStoreException {
LOGGER.info("Firecrest doPostAuthenticate is getting invoked...");
return true;
}
}
但是,使用联邦身份验证器时,永远不会调用#doPostAuthenticate方法。查看在#authenticate方法中调用此侦听器的AbstractUserStoreManager.java,我看到如下代码:
if(!authenticated && !domainProvided && this.getSecondaryUserStoreManager() != null) {
authenticated = ((AbstractUserStoreManager)this.getSecondaryUserStoreManager()).authenticate(userName, credential, domainProvided);
return authenticated;
}
这看起来没有为辅助用户商店调用监听器?这是打算,还是编码错误?我的听众肯定是在OSGi注册的。我做错了吗?
答案 0 :(得分:0)
在自定义用户存储管理器中记录doAuthenticate方法的末尾并不是一种犯罪行为。至少它会减少像这样小的复杂性。
在返回结果之前将其放在doAuthenticate方法的末尾,然后不时地grey你的日志或其他东西:
if(log.isDebugEnabled()) {
log.debug("User " + userName + " login attempt. Login success :: " + isAuthenticated);
}
您可以随意在管理控制台中设置该类或包的日志级别。