如何跟踪Java / Tomcat中的登录尝试并显示x尝试后用户被锁定的消息?

时间:2016-02-26 20:56:00

标签: java jsp tomcat authentication servlets

我的问题有点类似于下面的两个问题,但我认为它们并不能完全解决我的特定情况:

How to track login attempts using HttpSession in Java?

Should I use cookies or sessions to store login attempts and current login status?

这是瘦的。

用户通过JSP网页登录。表单提交到由外部供应商创建的登录身份验证servlet。 我无法修改此servlet,也无法以编程方式验证服务器。并不是我不知道如何修改它,但出于商业原因,我无法触摸它。

用户的凭据在特定于同一供应商的数据库上维护。如果登录尝试失败,则返回用户返回登录页面。

尽管如此,如果用户已被锁定,我需要向用户显示一条消息。锁定机制由供应商控制,所以我不必担心。 x尝试后用户被锁定。因此,假设用户在10次登录尝试后被系统锁定。如果我控制了登录认证servlet,那么显示消息会相对容易。我的想法是创建一个servlet过滤器,它映射到登录认证servlet。但是,因为servlet过滤器在处理映射的servlet / url之前触发,所以我只能验证用户最多x-1次尝试。

在第x次尝试时,过滤器在验证servlet检查用户凭据之前触发。说用户的凭据不正确。用户将被踢回登录页面。那我该怎么办? 我不能假设用户使用的是一个用户名。也许他已经尝试了一些用户名/密码凭据的组合来登录。本质上,我遇到的是用户必须有x + 1次登录尝试失败才能显示锁定消息。即,用户在10次尝试后被技术锁定,但锁定消息仅在11次或更多次尝试后才会显示。

我不太确定在x尝试所有这些限制后我能做些什么来显示锁定消息。

完全清楚,在这个建议的servlet过滤器中,供应商数据库表(我没有创建并且无法控制)跟踪每个用户名的尝试次数。所以,在为了让我验证用户被锁定,我看看这个表。当然,我需要在登录页面输入用户名。 我没有在代码中聚合登录尝试。数据库表负责这一点。

我的问题是我需要在x尝试使用特定用户名后在登录页面上显示一条消息。使用servlet过滤器,在登录认证servlet之前触发,我只能在x + 1尝试特定用户名后显示它。同样,我不能假设坐在电脑前的人正在使用一个用户名,或者同一个人一直坐在那里。在同一台计算机上可能会有多次来自不同用户名的登录尝试。

如果确实没有可行的方法,除了在供应商的servlet中添加锁定验证,那么我将尝试推动它。否则,我不确定我能做什么。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

如果登录失败,重定向如何工作?如果它发送HTTP 401,那么您可以在调用chain.doFilter之后但在从自己的doFilter返回之前检查它。在HttpSession中存储失败登录的次数,并在数量达到10时将其启动;