我需要像在 Gmail 中那样实现验证码功能。如果用户第一次请求,则不会显示验证码图像。但是,如果用户要求第二次登录,(用户第一次输入错误的密码)需要显示验证码。
请让我知道如何检查请求是否来自同一用户,以便我可以在我的 spring 类中实现一些业务逻辑。
我需要像在 Gmail 中那样实现验证码功能。如果用户第一次请求,则不会显示验证码图像。但是,如果用户要求第二次登录,(用户第一次输入错误的密码)需要显示验证码。
请让我知道如何检查请求是否来自同一用户,以便我可以在我的 spring 类中实现一些业务逻辑。
您为什么要尝试将登录尝试绑定到具体用户?如果我是不法分子并且我想猜测密码,我将使用可以使用代理的暴力破解器。
每次我都会有新的 IP,所以你的验证码对我不起作用。
在我看来,更好的解决方案是存储错误登录尝试的计数器。每次任何人为特定登录名输入错误密码时,您都会增加此登录的计数器值。如果密码正确,则将此值设置为 0。如果计数器值大于 0,您将显示您的验证码。
将计数器附加到 HTTP 会话。您可能需要将会话存储在服务器端,并且在分布式 ENV 中,您应该跨服务器同步 HTTP 会话。您还可以将该信息存储到客户端 cookie 中。
在服务器端(servlet)创建HttpSession
HttpSession session = request.getHttpSession();
并在此会话中保持命中数
session.setAttribute("count",i); //you can use getAttribute() method to check the count.
有几种方法可以做到这一点:
最后两个项目符号假设您希望在错误密码上而不是在不同的请求/页面重新加载上进行验证码。
上述每一种方法都有其优缺点。您需要根据需要选择一种或组合或多种。