1

我需要像在 Gmail 中那样实现验证码功能。如果用户第一次请求,则不会显示验证码图像。但是,如果用户要求第二次登录,(用户第一次输入错误的密码)需要显示验证码。

请让我知道如何检查请求是否来自同一用户,以便我可以在我的 spring 类中实现一些业务逻辑。

4

4 回答 4

2

您为什么要尝试将登录尝试绑定到具体用户?如果我是不法分子并且我想猜测密码,我将使用可以使用代理的暴力破解器。

每次我都会有新的 IP,所以你的验证码对我不起作用。

在我看来,更好的解决方案是存储错误登录尝试的计数器。每次任何人为特定登录名输入错误密码时,您都会增加此登录的计数器值。如果密码正确,则将此值设置为 0。如果计数器值大于 0,您将显示您的验证码。

于 2013-04-22T11:04:39.537 回答
1

将计数器附加到 HTTP 会话。您可能需要将会话存储在服务器端,并且在分布式 ENV 中,您应该跨服务器同步 HTTP 会话。您还可以将该信息存储到客户端 cookie 中。

于 2013-04-22T10:33:03.193 回答
0

在服务器端(servlet)创建HttpSession

HttpSession session = request.getHttpSession();

并在此会话中保持命中数

session.setAttribute("count",i);  //you can use getAttribute() method to check the count.
于 2013-04-22T10:29:44.817 回答
0

有几种方法可以做到这一点:

  • 首次加载页面时,启动会话(或发送一个 cookie)。对会话/cookie 使用计数。第二次找到 cookie 后,您可以吐出验证码。
  • 使用隐藏的表单域。在第二个请求中放置一个您可以识别的特殊名称/值对并发送验证码。
  • 使用 AJAX!这将涉及使用 XMLhttprequest 提交您的表单,如果无效,您可以显示验证码!这可能会给你更多的控制权,但代价是重新工作。

最后两个项目符号假设您希望在错误密码上而不是在不同的请求/页面重新加载上进行验证码。

上述每一种方法都有其优缺点。您需要根据需要选择一种或组合或多种。

于 2013-04-22T10:35:41.557 回答