2011-01-11 4 views
2

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

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

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

ответ

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); 
} 

Update: или если вы хотите быть параметр меньше (в соответствии с вашим комментарием по другому ответу), (ab) использовать сеанс.

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

, а затем в действии входа

response.sendRedirect((String) session.getAttribute("from")); 
session.removeAttribute("from"); 
+0

Хорошо, поэтому параметры GET - это единственный способ сделать это? Мы пытаемся сделать URL-адреса очень короткими и значимыми, поэтому, к сожалению, это не означает параметры GET. – DanielGibbs

+0

Я уже обновил ответ в секунду после того, как увидел ваш комментарий к другому ответу. F5 ваш браузер. – BalusC

+0

Ах да, злоупотребление сеансом. Я думаю, что я мог бы использовать это где-то, поэтому я мог бы также использовать его здесь. Благодаря! – DanielGibbs

1

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

+0

Да, это возможно, но с этим конкретным сайтом, мы пытаемся сделать URL, очень коротким и содержательным, поэтому, к сожалению, это не означает GET параметров , – DanielGibbs

+0

Могли бы вы, возможно, взглянуть на то, чтобы сбросить куки-файл или сохранить валы в сеансе? Мне не нравится решение лично, но правдоподобно. – Ryan

+0

Да, я думаю, что я, возможно, уже использую это где-то, это довольно правдоподобное решение. Благодаря! – DanielGibbs