防止登录时重复提交表单

时间:2012-08-28 09:12:22

标签: grails spring-security

我有一个导致OOME/Stackoverflow as per this posting的问题,现在几乎可以肯定这是由登录时重复的表单提交引起的。这一切都是使用Spring Security插件完成的。有办法防止这种情况吗?

我想过使用useToken / withForm但是看不到Spring Security如何发布到j_spring_security_check,所以我无法控制它。

使用自定义UserDetailsS​​ervice并且可以查看如何检查当前会话是否已登录,例如通过RequestContextHolder.requestAttributes.sessionMutex.session.attributes.xyz,但不确定这似乎是正确的方式。

使用Grails 2.0.4

2 个答案:

答案 0 :(得分:1)

“Grails内置支持使用”Synchronizer Token Pattern“处理重复的表单提交。要开始,请在表单标签”

上定义一个标记。

您可以阅读以下内容:http://grails.org/doc/latest/guide/single.html#formtokens

答案 1 :(得分:0)

跟踪核心问题是在自定义UserDetailsS​​ervice中调用的User.save()(例如更新上次登录时间),Hibernate会话在每个用户的后续调用中关闭。

将User.save()移动到AuthenticationEventListener.onApplicationEvent(AuthenticationSuccessEvent事件),它运行正常。知道如何处理j_spring_security_check

的重复帖子仍然会很好