0

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

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

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

使用 Grails 2.0.4

4

2 回答 2

1

“Grails 内置了对使用“同步器令牌模式”处理重复表单提交的支持。要开始,您可以在表单标签上定义一个令牌”

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

于 2012-08-28T12:47:54.740 回答
0

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

将 User.save() 移动到 AuthenticationEventListener.onApplicationEvent(AuthenticationSuccessEvent event) 并且工作正常。仍然会很高兴知道如何处理重复的帖子到 j_spring_security_check

于 2012-08-29T00:57:49.223 回答