我需要在失败的登录尝试时捕获用户名,以便进行分析以检测可能在登录我的应用程序时遇到问题的攻击和用户。
在所有控制器和操作的过滤器上,我使用域类ActivityLog创建日志,其中为每个请求存储所有请求/参数数据。当我尝试获取来自登录控制器的操作的用户名时,用户名不在params上,也不在j_username上。
如何从过滤器获取失败登录时使用的用户名?
params看起来像:[login_error:1,action:auth,controller:login]
我尝试从GrailsAnonymousAuthenticationToken获取信息,但用户名为 grails.anonymous.user
答案 0 :(得分:0)
简短的回答是,您无法在过滤器中获取该信息。
很长的答案是使用Grails的spring安全核心插件中内置的事件来对失败的身份验证事件做出反应。
以下是Grails 2.4.x应用程序的示例
// Config.groovy
grails.plugin.springsecurity.apf.storeLastUsername = true // this is now needed with updated version of spring security
grails.plugin.springsecurity.useSecurityEventListener = true
grails.plugin.springsecurity.onInteractiveAuthenticationSuccessEvent = { e, appCtx ->
// Successful login stuff in here
}
grails.plugin.springsecurity.onAbstractAuthenticationFailureEvent = { e, appCtx ->
// Failed login stuff in here
// e.getAuthentication().getPrincipal() contains the principal object
}