Jsp Can';登录失败后无法读取j_用户名

Jsp Can';登录失败后无法读取j_用户名,jsp,servlets,websphere,servlet-filters,Jsp,Servlets,Websphere,Servlet Filters,我使用WebSphereJEE表单身份验证,并希望在错误页面中返回输入的j_用户名 我使用自定义筛选器拦截对j_security_check的调用,并将j_username参数作为属性添加到请求中,但在错误页面或控制器中检查该属性时,我发现它始终为null。在访问j_安全检查之前,在筛选器中找到了参数j_username,问题是登录尝试失败后 为什么websphere在重定向到错误url时不传递j_用户名和j_密码,以及如何在登录错误页面中访问j_用户名?我猜当登录失败时,j_用户名将被清空。您

我使用WebSphereJEE表单身份验证,并希望在错误页面中返回输入的j_用户名

我使用自定义筛选器拦截对j_security_check的调用,并将j_username参数作为属性添加到请求中,但在错误页面或控制器中检查该属性时,我发现它始终为null。在访问j_安全检查之前,在筛选器中找到了参数j_username,问题是登录尝试失败后


为什么websphere在重定向到错误url时不传递j_用户名和j_密码,以及如何在登录错误页面中访问j_用户名?

我猜当登录失败时,j_用户名将被清空。您可能需要从过滤器中的请求中检索登录名,并使用request.getParameter(“j_username”)将其传递到错误页面


尽管我会说,从安全角度来看,向最终用户提供的信息越少越好。我不会告诉最终用户用户名存在并且密码不正确,因为如果有人试图入侵该帐户,那么你已经给了他们一条他们不知道的信息,即“用户名有效吗”?我会显示他们输入的用户名,但简单地说“用户名不存在或密码无效”,并让它模棱两可。这样,有效用户将知道他们是否输入了错误的用户名,但黑客不知道他是否正确。

解决方案很简单。我发现WebSphere8.5在操作为/j_security_check时创建了一个会话。因此,我使用/j_security_check的web筛选器在该会话中存储j_username参数,当登录失败时,我使用${sessionScope[STORED_username]}从该会话中检索用户名


希望能有所帮助

为什么?用户知道他输入了什么。你为什么要告诉他他已经知道的?首先,这并没有回答问题。但是,如果你感到好奇,有很多原因,包括你不能期望客户避免打字错误,并要求他记住他键入的内容。或者,您希望检查登录失败是否是因为您的数据库中根本不存在用户名,并根据该用户名显示相应的错误消息或重定向到注册页面。原因有很多,但我对答案比对问题更感兴趣:)当服务器重定向到错误页面时,j_用户名为空。出于安全原因,我同意向用户显示较少的信息。但是,此应用程序仅供内部使用,不供公众使用。但是谢谢你的通知。因此,您应该能够在调用登录名之前使用request.getParameter()提取用户名,然后保存用户名以传递到错误页面。