4

我正在使用 Java servlet 创建一个网站,并且我有一个名为 LogIn 的页面。我想要发生的是,一旦用户成功填写了登录表单,它就会将他们返回到他们之前所在的页面。

现在这适用于来自另一个页面的 GET 或 POST,因为前一页存储在 Referer 标头中。但是,当我将(302)重定向到登录页面(从用户由于未登录而无法访问的页面)时,Referer 标头为空。

当用户被重定向到登录页面时,有什么方法可以实现我想要的吗?

4

2 回答 2

2

无论如何,我都不会信任引用标题,因为您依赖于浏览器是否已发送它。而是根据当前请求 URI 自己提供。

response.sendRedirect("login?from=" + URLEncoder.encode(request.getRequestURI(), "UTF-8"));

然后在登录表单中

<form action="login" method="post">
    <input type="text" name="username">
    <input type="password" name="password">
    <input type="hidden" name="from" value="${param.from}">
    <input type="submit">
</form>

然后在登录动作中

User user = userDAO.find(username, password);
if (user != null) {
    session.setAttribute("user", user);
    response.sendRedirect(request.getParameter("from"));
} else {
    request.setAttribute("error", "Unknown login");
    request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request, response);
}

更新:或者如果您想要无参数(根据您对其他答案的评论),(ab)使用会话。

session.setAttribute("from", request.getRequestURI());
response.sendRedirect("login");

然后在登录动作中

response.sendRedirect((String) session.getAttribute("from"));
session.removeAttribute("from");
于 2011-01-11T20:56:53.517 回答
1

您可能只想将当前页面作为 GET 参数附加,即http://yoursite.com/login?redir=/topics以便在您的身份验证 servlet 中,如果用户没有适当的凭据,只需使用当前的uri,附加到登录 url 并重定向。

于 2011-01-11T20:54:09.750 回答