我使用Java servlets創建網站,並且我有一個名爲LogIn的頁面。我想要發生的事情是,一旦用戶成功填寫登錄表單,它會將它們返回到他們以前所在的頁面。302重定向後的HTTP Referer
現在,這可以正常工作從另一個頁面的GET或POST,因爲上一頁存儲在Referer頭。但是,當我將(302)重定向到LogIn頁面(來自用戶因未登錄而無法訪問的頁面)時,Referer標頭爲空。
當用戶重定向到LogIn頁面時,有什麼辦法實現我想要的嗎?
我使用Java servlets創建網站,並且我有一個名爲LogIn的頁面。我想要發生的事情是,一旦用戶成功填寫登錄表單,它會將它們返回到他們以前所在的頁面。302重定向後的HTTP Referer
現在,這可以正常工作從另一個頁面的GET或POST,因爲上一頁存儲在Referer頭。但是,當我將(302)重定向到LogIn頁面(來自用戶因未登錄而無法訪問的頁面)時,Referer標頭爲空。
當用戶重定向到LogIn頁面時,有什麼辦法實現我想要的嗎?
無論如何,我不會相信referer頭,因爲您依賴於瀏覽器是否已經發送。而是根據當前的請求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");
您可能希望僅將當前頁面附加爲GET參數,例如http://yoursite.com/login?redir=/topics,以便在auth servlet中,如果用戶沒有相應的憑據,只需取當前uri,追加到登錄url並重定向。
是的,這是可能的,但是這個特殊的網站,我們正在努力讓網址非常短的,有意義的,所以很不幸,這意味着沒有GET參數應用。 – DanielGibbs 2011-01-11 20:55:03
你可能會考慮放棄一個cookie或在session中存儲vals嗎?我個人不喜歡這個解決方案,但似乎是合理的。 – Ryan 2011-01-11 21:00:40