在RememberMe登录(Grails)上多次触发onInteractiveAuthenticationSuccessEvent

时间:2014-05-20 15:08:06

标签: grails spring-security grails-2.0 grails-plugin

在Config.groovy中设置spring-security-core onInteractiveAuthenticationSuccessEvent Closure以更新用户的lastLogin字段,只要执行交互式登录,该字段就会起作用。 如果执行rememberMe登录,则会多次触发该事件,从而导致ConcurrentModificationException(s)。

到目前为止,我找到的唯一解决方法是:

  • 不要使用rememberMe
  • 检查lastLogin是否与当前时间决定是否执行其他更新。

示例:

onInteractiveAuthenticationSuccessEvent = { e, appCtx ->
   User.withTransaction {
   def user = User.get((Long)appCtx.springSecurityService.currentUser.id)
   if (user.lastLogin && new LocalDateTime().toDate().time - user.lastLogin?.toDate().time < 5000) {
      println "ignoring double fired onAuthenticationSuccessEvent"
      return
   }
   user.lastLogin = new LocalDateTime()
   user.save(flush: true)
}

有没有人知道为什么在使用rememberMe时多次触发onInteractiveAuthenticationSuccessEvent?

0 个答案:

没有答案