0

我已经设置了一个登录页面login.jsp。每当我去login.jsp指定其他查询字符串时,例如

login.jsp?你好

并单击登录,我被重定向到index.jsp并且?hello查询字符串被剥离。

有没有办法保留查询字符串?

4

1 回答 1

1

如果您使用的是容器管理的身份验证,那么这是不可能的。仅当查询字符串实际上位于最终用户首先显示登录页面的受限 URL 中时,才会自动处理它。成功登录后,容器将自动重定向回受限制的 URL,并带有原始查询字符串。

如果您使用的是本地身份验证,则只需复制登录 URL 中的当前查询字符串。例如

<form action="login?${pageContext.request.queryString}" method="post">
    <input type="text" name="username" />
    <input type="password" name="password" />
    <input type="submit" value="login" />
</form>

然后,在 servletdoPost()或您正在处理登录的任何地方,然后只需获取查询字符串HttpServletRequest.getQueryString()并在重定向时将其传递。例如

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 的一部分,这将更有意义,正如标准容器管理的身份验证机制所支持的那样。所以也许你需要重新考虑一个又一个。

于 2012-04-21T03:28:48.560 回答