我正在使用 spring安全插件,我想将用户的登录日期保存在数据库中,所以我在配置文件中写了以下内容:
grails.plugin.springsecurity.useSecurityEventListener = true
grails.plugin.springsecurity.onAuthenticationSuccessEvent= { e, appCtx ->
com.app.utils.UserActivity.withTransaction {
def user = com.app.utils.UserActivity.findByUser(com.app.security.Users.get(appCtx.springSecurityService.principal.id))
if (!user)
{
new com.app.utils.UserActivity(user:user,userLoggedIn:new Date(),userLoggedOut: null).save(failOnError:true)
}
else
{
user.userLoggedIn= new Date()
user.userLoggedOut=null
user.save(failOnError:true)
}
}
}
问题是appCtx.springSecurityService.principal.id
始终返回null
,并且logout
操作是否有任何事件。
答案 0 :(得分:2)
获取pricipal的正确方法来自身份验证事件:
e.getAuthentication().getPrincipal()