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

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

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

最佳答案

无论如何,我不会相信引用 header ,因为您依赖于浏览器是否已发送。而是根据当前请求 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 。
session.setAttribute("from", request.getRequestURI());
response.sendRedirect("login");

然后在登录操作中
response.sendRedirect((String) session.getAttribute("from"));
session.removeAttribute("from");

关于java - 302重定向后的HTTP Referer,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4662508/

10-11 09:15