Grails withForm和AWS交互

时间:2014-02-27 16:14:20

标签: grails amazon-web-services groovy

以下问题使用以下内容:

  • AWS
  • 的PostgreSQL
  • Grails 2.3.3
  • Redis的

在我们的帐户创建页面上,我们在Grails withForm{}.invalidToken{}关闭时有一些非常模糊的功能。

第一次点击页面时,一切正常。只要您不离开此页面,就可以将服务器回发到服务器。

离开此页面后,通过导航链接或注销,返回页面(再次通过导航链接或登录并前往那里),我们无法再提交,每次都会点击invalidToken关闭。

我知道AWS参与了我们的项目并将其部署到本地机器上,并且本身都使用IntelliJ和Tomcat,并且都可以正常工作。仅在将WAR部署到AWS时才会出现此问题。 (这可以通过本地构建和自动构建来实现。它们在本地工作,但不在AWS上工作)

我们已经花了将近一个星期的时间来试图找出这个问题的原因,而我们必须要证明的是,我们知道AWS在某种程度上有所涉及,但这就是我们已经得到的。

有没有人能够深入了解会导致我们会话的行为?

1 个答案:

答案 0 :(得分:0)

经过大量关于这个问题的搜索,我和我的团队终于明白了。直接来自我们的JIRA:

"此问题是由AWS上使用的tomcat-redis-session-manager的实现引起的。根据他们的文档(https://github.com/jcoleman/tomcat-redis-session-manager#session-change-tracking),如果您隐式更改会话中的密钥或者即使更新密钥,对象的相等性不会更改,也会出现隐藏写入的意外后果"具体而言," useToken"实现是Grails 2.3.8是:" String generateToken(String url){final UUID uuid = UUID.randomUUID()getTokens(url).add(uuid)return uuid}"这些本机实现的组合是不兼容的。 tomcat-redis-session-manager通过设置:RedisSession.setManualDirtyTrackingSupportEnabled(true)确实支持手动脏跟踪模式;但是这需要在grails-core中使用分叉的SynchronizerTokensHolder构建。"