HTTP Referer после перенаправления 302 - PullRequest
2 голосов
/ 11 января 2011

Я создаю веб-сайт с использованием Java-сервлетов, и у меня есть страница с именем LogIn.Я хочу, чтобы после того, как пользователь успешно заполнил форму входа в систему, он возвращает их на страницу, на которой они были ранее.

Теперь это прекрасно работает с GET или POST с другой страницы,потому что предыдущая страница хранится в заголовке Referer.Но когда я перенаправляю (302) на страницу входа (со страницы, к которой пользователь не может получить доступ, потому что он не вошел в систему), заголовок Referer становится пустым.

Есть ли способ достичь того, чего я хочу, когдапользователь перенаправлен на страницу входа?

Ответы [ 2 ]

2 голосов
/ 11 января 2011

Я бы не стал доверять заголовку реферера, так как вы зависите от браузера, был ли он отправлен.Вместо этого укажите его самостоятельно на основе текущего 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");
1 голос
/ 11 января 2011

Возможно, вы захотите просто добавить текущую страницу в качестве параметра GET, т.е. http://yoursite.com/login?redir=/topics, чтобы в вашем сервлете авторизации, если у пользователя нет соответствующих учетных данных, просто взять текущий URI и добавить кURL для входа и перенаправления.

...