我已设置登录页面login.jsp
。每当我转到login.jsp
并指定其他查询字符串,例如
的login.jsp?你好
点击登录,我被重定向到index.jsp
,?hello
查询字符串被删除。
有没有办法保留查询字符串?
答案 0 :(得分:1)
如果您正在使用容器管理身份验证,那么这是不可能的。只有当查询字符串实际位于 受限制的URL中时,才会自动处理它,并且最终用户首先向该用户显示登录页面。容器成功登录后自动重定向回受限制的URL,并使用原始查询字符串。
如果您正在使用自行开发的身份验证,则只需在登录URL中复制当前查询字符串即可。 E.g。
<form action="login?${pageContext.request.queryString}" method="post">
<input type="text" name="username" />
<input type="password" name="password" />
<input type="submit" value="login" />
</form>
然后,在servlet的doPost()
中,或者在您处理登录的任何地方,只需抓取HttpServletRequest.getQueryString()
的查询字符串并在重定向时传递它。 E.g。
User user = userService.find(username, password);
if (user != null) {
request.getSession().setAttribute("user", user); // Do whatever you need to represent a logged-in user.
response.sendRedirect(request.getContextPath() + "/index.jsp?" + request.getQueryString());
}
else {
// Show "unknown login" error?
}
总而言之,我不确定在登录URL中使用查询字符串的功能要求在现实世界中是否有意义。如果该查询字符串是您需要首先登录的原始受限URL的一部分,那将更有意义,正如标准容器管理认证机制所支持的那样。所以也许你需要重新考虑这个和那个。