首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有spring安全性的grails中的最后登录日期

带有spring安全性的grails中的最后登录日期
EN

Stack Overflow用户
提问于 2011-05-12 05:00:23
回答 1查看 2.2K关注 0票数 0

当我试图用lastLogin中的事件侦听器设置Config.groovy日期时,我遇到了这个错误。

2011-05-12 00:30:16,501 "ajp-bio-8009"-exec-6错误events.PatchedDefaultFlushEventListener -无法将数据库状态与会话org.hibernate.StaleObjectStateException同步:行被另一个事务更新或删除(或未保存的值映射不正确):spl.User#110

我的代码:

代码语言:javascript
复制
grails.plugins.springsecurity.onInteractiveAuthenticationSuccessEvent = { e, appCtx ->
    User.withTransaction {
        def user = appCtx.springSecurityService.currentUser
        user.lastLogin = new Date()
        user.save(flush: true)
    }
}

我似乎无法在我的测试环境中复制这一点,但有一次,我在生产中实际尝试了这个错误,并决定返回。更改保存以解决合并问题吗?

编辑:我能够在我的测试环境中复制错误,同时以同一个用户的身份登录。为了进一步调试,我在事件处理程序中添加了一些print语句,并开始使用它。结果是,当我登录或任何人登录到我的站点时,事件处理程序会被多次调用,从而导致陈旧的对象异常。为什么onInteractiveAuthenticationSuccessEvent在登录时不止一次被调用?

谢谢,里卡多

EN

回答 1

Stack Overflow用户

发布于 2011-05-12 18:42:42

首先,您需要在会话中获得用户的新副本:

代码语言:javascript
复制
grails.plugins.springsecurity.onInteractiveAuthenticationSuccessEvent = { e, appCtx ->
    User.withTransaction {
        def user = User.get(appCtx.springSecurityService.currentUser.id)
        user.lastLogin = new Date()
        user.save(flush: true)
    }
} 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5973471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档