Grails的Spring安全性插件中的登录日期

时间:2016-02-16 21:48:08

标签: grails spring-security

我正在使用 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操作是否有任何事件。

1 个答案:

答案 0 :(得分:2)

获取pricipal的正确方法来自身份验证事件:

e.getAuthentication().getPrincipal()