2011-01-11 94 views
2

我使用Java servlets創建網站,並且我有一個名爲LogIn的頁面。我想要發生的事情是,一旦用戶成功填寫登錄表單,它會將它們返回到他們以前所在的頁面。302重定向後的HTTP Referer

現在,這可以正常工作從另一個頁面的GET或POST,因爲上一頁存儲在Referer頭。但是,當我將(302)重定向到LogIn頁面(來自用戶因未登錄而無法訪問的頁面)時,Referer標頭爲空。

當用戶重定向到LogIn頁面時,有什麼辦法實現我想要的嗎?

回答

2

無論如何,我不會相信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"); 
1

您可能希望僅將當前頁面附加爲GET參數,例如http://yoursite.com/login?redir=/topics,以便在auth servlet中,如果用戶沒有相應的憑據,只需取當前uri,追加到登錄url並重定向。

+0

是的,這是可能的,但是這個特殊的網站,我們正在努力讓網址非常短的,有意義的,所以很不幸,這意味着沒有GET參數應用。 – DanielGibbs 2011-01-11 20:55:03

+0

你可能會考慮放棄一個cookie或在session中存儲vals嗎?我個人不喜歡這個解決方案,但似乎是合理的。 – Ryan 2011-01-11 21:00:40