2017-01-10 116 views
0

我使用websphere jee表单身份验证,并且想要在错误页面中返回输入的j_username。登录失败后无法读取j_username

我用一个自定义过滤器来拦截对j_security_check的调用,并将j_username参数作为属性添加到请求中,但是当在错误页面或控制器中检查属性时,我发现它始终为空。在访问j_security_check之前,在过滤器中找到了参数j_username,问题出在尝试登录失败之后。

为什么websphere在重定向到错误url时不会传递j_username和j_password,以及如何在登录错误页面中访问j_username?

+0

为什么?用户知道他输入的内容。你为什么需要告诉他他已经知道了什么? – EJP

+0

首先,没有回答这个问题。但是,如果你很好奇,有很多原因,包括你不能指望客户避免输入错别字,并要求他记住他输入的内容。或者你想检查登录失败是否发生,因为用户名在你的数据库中完全不存在,并且基于那个显示适当的错误消息或重定向到注册页面。有很多原因,但我更感兴趣的是答案而不是问题:) –

回答

0

解决方案很简单。我发现当action为/ j_security_check时,websphere 8.5会创建一个会话。因此,我使用了/ j_security_check的Web过滤器来将j_username参数存储在该会话中,并且在发生登录失败时,我使用$ {sessionScope [STORED_USERNAME]}从该会话中检索了用户名。

希望帮忙

0

我的猜测是当登录失败发生时j_username被清空。您可能必须从过滤器中的请求中检索登录名,并使用request.getParameter(“j_username”)将它传递给错误页面?

尽管我会从安全角度来说,对最终用户来说,更少的信息会更好。我不会告诉最终用户该用户名存在,并且密码不好,因为如果有人试图破解该帐户,那么你已经给了他们一个信息,他们不知道哪个是“用户名有效”?我会显示他们输入的用户名,但只是说“要么用户名不存在,要么密码是无效的”,并使其不明确。这样,有效用户就会知道他们是否错误地键入了他们的用户名,但黑客并不知道他是否正确地输入了用户名。

+0

当服务器重定向到错误页面时,j_username被忽略。我同意出于安全原因向用户显示较少的信息。但是,这个应用程序是供内部使用的,而不是公开的。但是,谢谢你的信息 –

+0

没错。所以你应该能够在调用登录之前使用request.getParameter()来获取用户名,然后让它保存以传递到错误页面。 –

相关问题