0

我正在使用 Spring MVC 3 和 JSP/JSTL 作为视图。我已经在我的表单中加入了 reCaptcha。当我提交表单时,我注意到一些非常奇怪的行为并不一致(即它不会一直发生,它是随机的)。这只发生在谷歌浏览器上。

我在网上搜索过,但找不到有关此问题的任何信息。

基本上,当我提交包含有效验证码的表单时,我会被退回到表单页面,但验证码是有效的。我很幸运,能够调试一次并看到验证码是有效的,但是控制流以某种方式被拦截,尽管它执行了返回的 ModelAndView 逻辑。

所以换句话说,它应该返回一个带有新视图的 ModelAndView 控制器,但是控制流回到了函数的顶部!!!并且它击中了recaptcha代码但是此时recaptcha代码无效,所以它说FALSE。然后它返回到原始表单页面。令人沮丧的是,我的生产数据库发生了提交,因为验证码最初是有效的,而其他有效逻辑是按照正常行为执行的。

reCaptcha 框是唯一标有错误的框,它指出您必须重新输入代码。唯一的主要问题是即使我的 reCaptcha 很糟糕,它应该立即返回并说重试,它确实如此,但它不应该显示为有效,劫持控制流,然后重定向回表单页面。

最终结果是我在数据库中得到了 2 条确切的记录,因为用户再次提交。它只会以这种方式发生。即我还没有遇到过你必须提交3 次或更多的情况。

这只发生在谷歌浏览器中。我在 Firefox 和 IE 上试过这个,但我从未见过这个问题。另一个国家的人刚刚通过这个表格提交了信息,我问他们使用的是什么浏览器,他们确认是 chrome!我也有足够多的遭遇这个问题,知道它实际上是一个问题。

有谁知道为什么控制流回到函数的顶部?我注意到的另一件事是控制流并不总是走到底部,就像它有自己的想法一样。还有一次,我正在跨步,它就跳到了顶部。

任何帮助将不胜感激,因为我正试图在生产系统中解决这个问题!谢谢!!

4

0 回答 0