在Config.groovy中设置spring-security-core onInteractiveAuthenticationSuccessEvent Closure以更新用户的lastLogin字段,只要执行交互式登录,该字段就会起作用。 如果执行rememberMe登录,则会多次触发该事件,从而导致ConcurrentModificationException(s)。
到目前为止,我找到的唯一解决方法是:
示例:
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?