我通过GET方法向j_spring_security_check发出请求时出现了一个奇怪的重新出现的问题。 我的所有登录表单都使用POST进行j_spring_security检查以发布登录凭据。然而,应用程序用户多次报告有时他们在尝试登录时会收到错误页面。我在日志中跟踪这些情况,看起来人们访问登录页面然后下一个请求是GET到j_spring_security_check。
它也曾经发生在我身上,但我无法重现它。
你有什么想法可能会发生这种情况吗?出于某种原因,spring security可以重定向到j_spring_security吗? 我仔细检查了html和javascript没有提及j_spring_security_check,除了在表单元素的action字段中都将方法设置为POST。
任何帮助或想法都将不胜感激。
编辑:其他信息: WebApp由Tomcat提供服务。前面有Apache反向代理。包含登录表单的页面会通过w3c验证。
答案 0 :(得分:1)
差不多一个月之后,我们终于弄清楚为什么谷歌Chrome会发生这种情况。 显然,如果您使用SHIFT + ENTER提交表单,Chrome将打开一个新窗口并发出GET请求而不是POST请求。由于某些用户将大写字符/特殊字符作为密码的最后一个字母,因此在按下shift键的最后一个字母中键入,然后按下Enter键以登录而尚未释放shift键。结果是对j_spring_security检查的GET请求。我们将通过拦截shift +在javascript中输入来解决此问题。