使用Spring Security更改Grails中的上次登录日期

时间:2011-05-03 10:48:01

标签: grails spring-security

在我使用的Config.groovy中:

grails.plugins.springsecurity.useSecurityEventListener = true

grails.plugins.springsecurity.onInteractiveAuthenticationSuccessEvent = { e, appCtx ->
    User.withTransaction {
        def user = User.findById(appCtx.springSecurityService.principal.id)
        if(!user.isAttached())
            user.attach()
        user.lastLoginDate = new Date()
        user.save(flush: true, failOnError: true)
    }
}

我的用户域有此字段,登录时不会出现任何错误,但该字段未更新。

我在org.hibernate尝试了debugging everything,但我找不到任何update或其他相关陈述。

我还需要在任何地方添加其他内容才能使其正常工作吗?

记录:

  • Grails 1.3.7
  • Spring Security Core 1.1.2
  • Hibernate 1.3.7

2 个答案:

答案 0 :(得分:5)

好的,答案很简单。我忘了包名,所以找不到User

如果您的User对象位于包org.test

,那么这个就有用了
org.test.User.withTransaction {
      def user = org.test.User.get(appCtx.springSecurityService.principal.id)
      user.lastLoginDate = new Date()
      user.save(failOnError: true)
}

答案 1 :(得分:0)

使用Spring安全核心的版本是什么?看看this question以及春季安全作者给出的相关答案....可能你需要升级spring security版本吗?

:: UPDATE ::

This post和你的问题一样,希望你能通过调查得到解决方案......