我與你一段所描述的問題掙扎......
我試圖用會話的API,請求和響應做了重定向時,用戶已經登錄,但使用Jetty時,用戶的驗證數據顯然無法從登錄頁面獲得。
我對JSP和Jetty是完全陌生的(我將它用於類作業),但是我提出了一個工作得很好的解決方案,甚至認爲它不是理想的解決方案。
首先,我做了一個小的旁路在我的登錄頁中添加一個變量看,如果頁面已經被加載,使用以下JSP:
<%
if(session.getAttribute("loginLoadedOnce") == "true")
{
response.sendRedirect("/redirect.jsp");
}
else
{
session.setAttribute("loginLoadedOnce", "true");
}
%>
這樣的話,如果該屬性設置不正確的,它會讓用戶嘗試登錄。否則,它將重定向到重定向頁面。重定向頁面將提供用戶數據,並能夠查看用戶是否具有某些角色。
的重定向頁面的JSP代碼是這樣的:
<%
if(request.isUserInRole("admin"))
{
String url = response.encodeRedirectURL("admin/AdminPage.jsp");
response.sendRedirect(url);
}
else if(request.isUserInRole("accounting"))
{
String url = response.encodeRedirectURL("/accounting/Mainpage.jsp");
response.sendRedirect(url);
}
else
{
// Here the user has no role that we are aware of.
session.setAttribute("loginLoadedOnce", "false"); // stop redirect loop.
response.sendRedirect("/login.jsp");
}
%>
在這裏,我們檢查用戶的角色和我們重定向到該角色的正確頁面。
現在,用戶必須先註銷才能返回登錄頁面。即使使用瀏覽器的「後退」按鈕,每個暫時返回登錄頁面的嘗試都將最終重定向。
希望這能幫助別人。
您是否找到了解決方案呢?我與jetty-maven有完全相同的問題。我還沒有弄清楚。 – ForceMagic 2012-11-10 01:58:38