2012-08-01 82 views
2

在用戶登錄後,在我想打一個重定向如果/login再次訪問,使用戶無法訪問登錄表單,如果他/她是已通過身份驗證無法鑑別之後,從登錄頁面重定向與JAAS

我使用碼頭8我在FormAuthenticator.java:168方法validateRequest發現,如果用戶訪問登錄或錯誤頁面,用戶從未認證沉綿認爲可能是這種情況

if (isLoginOrErrorPage(URIUtil.addPaths(request.getServletPath(),request.getPathInfo()))) 
    return Authentication.NOT_CHECKED; 

我該如何解決這個問題?

+0

您是否找到了解決方案呢?我與jetty-maven有完全相同的問題。我還沒有弄清楚。 – ForceMagic 2012-11-10 01:58:38

回答

3

此問題已於2012-08-07修復。我認爲Jetty不按預期工作。出於這個原因,我filed a bug關於重定向行爲。看看最新的Jetty 8,它現在應該爲你工作,分別看看fix

+0

哇!我很驚訝。 Mevos的解決方案雖然爲我工作,但我並沒有使用Jetty 8。 – ForceMagic 2012-11-13 06:20:04

3

我與你一段所描述的問題掙扎......

我試圖用會話的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"); 
} 
%> 

在這裏,我們檢查用戶的角色和我們重定向到該角色的正確頁面。

現在,用戶必須先註銷才能返回登錄頁面。即使使用瀏覽器的「後退」按鈕,每個暫時返回登錄頁面的嘗試都將最終重定向。

希望這能幫助別人。