2

通过 GET 方法向 j_spring_security_check 发出请求时,我再次出现了一个奇怪的问题。我所有的登录表单都使用 POST 到 j_spring_security 检查来发布登录凭据。然而,应用程序用户多次报告他们在尝试登录时有时会收到错误页面。我在日志中跟踪了这些情况,看起来人们访问了登录页面,然后下一个请求是 GET 到 j_spring_security_check。

它也发生在我身上一次,但我无法重现它。

你知道为什么会发生这种情况吗?出于某种原因,spring security 会重定向到 j_spring_security 吗?我仔细检查了 html 和 javascript,除了在表单元素的 action 字段中没有提到 j_spring_security_check,它们都将方法设置为 POST。

任何帮助或想法将不胜感激。

编辑:附加信息:WebApp 由 Tomcat 提供服务。前面有 Apache 反向代理。包含登录表单的页面通过 w3c 验证。

4

1 回答 1

2

将近一个月后,我们终于弄清楚了为什么会在谷歌浏览器中发生这种情况。显然,如果您使用 SHIFT+ENTER 提交表单,Chrome 将打开一个新窗口并发出 GET 请求而不是 POST 请求。由于某些用户将大写字符/特殊字符作为密码的最后一个字母,因此他们在按下 shift 并按下 enter 登录时键入最后一个字母,而尚未释放 shift 键。结果是对 j_spring_security 检查的 GET 请求。我们将通过拦截 javascript 中的 shift + enter 来解决此问题。

于 2013-08-29T09:36:02.923 回答