我们有一个自定义的javax.security.auth.spi.LoginModule
用于Web服务以及Weblogic 11g上的一些Web应用程序。在自定义javax.security.auth.spi.LoginModule中访问HttpServletRequest
目标是在通过LoginModule
时记录关于登录的信息,尤其是失败的登录信息。部分所需信息是认证请求来自的IP地址。我发现的问题是我不知道如何将这些信息放入LoginModule
。
当前LoginModule
只是验证指定的用户名和密码是否与存储在JDBC数据库中的值匹配。如果身份验证失败,则增加一个计数器以跟踪该用户的失败登录次数,如果它们作为有效用户存在的话。如果我理解正确,通过在initialize
方法中指定的CallbackHandler
传入用户名和密码。我不清楚这些值首先是如何进入CallbackHandler
以及如何指定其他动态内容,例如请求的始发IP地址。通过调试,我发现CallbackHandler
确实在下面的链中有请求:handler.ch.delegate.contextHandler.requestElement
但我不知道如何访问CallbackHandler
接口中的任何接口。
我研究了一些AuditProviders等,发现one example that logged the HTTP method,所以我会想象从HTTP请求获得额外的信息将是可能的,我还没有发现它。但是,我将不得不修改我们的自定义安全提供程序以创建要审计的AuditEvent
。其中一部分将提供请求,这使我们回到从LoginModule
内访问HttpServletRequest
的初始问题。
我试图实现一个ServletAuthenticationFilter
作为我们的安全提供程序的一部分,但它似乎是调用BEFORE身份验证,这不会帮助我们捕获失败的登录尝试。
我对开发/修改安全提供程序比较陌生,所以基本示例/解释是最好的。
谢谢!
您的自定义LoginModul如何工作? – Horcrux7 2010-10-27 20:15:20