2010-02-03 209 views
0

我對彈簧安全性如何工作有些困惑:春季安全登錄頁面?

在我的應用程序中,我需要一個用戶登錄頁面,然後他們被重定向回頁面。我瀏覽了一些春季安全教程並閱讀了一些文章,這些示例通過確保某個網站上的某個頁面(由<intercept url ..>標籤管理)進行工作。然後,Spring安全將生成一個登錄頁面(或者您可以指定您自己的)以訪問受保護的頁面。

我很困惑,因爲我不想在我的網站上安全的給定一個頁面:我想要一個登錄頁面讓用戶登錄後才能訪問該站點的高級功能(通過Spring安全性的授權功能)。我的問題是:根據我所描述的,創建此登錄頁面的策略是什麼?在登錄後,將授予登錄用戶相應的權限?

我想到的破解將創建一個簡單的JSP頁面,只有功能是重定向回到上一頁。然後我會使用Spring Security來保護那個JSP頁面。但好像應該有這樣做的更好的辦法...

感謝

回答

2

當用戶還沒有登錄,你可以把他當作匿名。因此該頁面將隱藏標有<sec:authorize ifAllGranted="ROLE_SUPERVISOR">的所有內容。
有關更多詳細信息,請參閱Anonymous Authentication

0

你必須設置always-use-default-target="false"使春季安全將自動重定向到前一頁,如果它被設置爲true,它將始終採用默認主頁。該酒店位於form-login標籤上。

+0

謝謝。但是,你認爲你可以提供更多的細節來幫助我解決我的具體問題嗎?基本上我想知道如何使用spring安全來創建一個登錄頁面來提供訪問權限。到目前爲止,我發現的所有內容都解釋瞭如何保護某個頁面。我希望能夠基於他/她的ROLE(使用JSP標籤)向用戶顯示不同的東西......謝謝 – oym 2010-02-03 22:04:08

+0

Spring安全性有安全標籤,使用它可以控制jsp中的內容,例如使用' sec:授權ifAllGranted =「ROLE_SUPERVISOR」>,您只能向角色爲supervisor的用戶顯示特定內容。這是您正在尋找的功能嗎? – 2010-02-03 22:11:54

+0

是的。但我仍然感到困惑。基本上我需要一個登錄頁面,其目的是提升用戶的角色(一旦他們成功登錄)。也許你可以指點我如何做到這一點,因爲我發現的所有教程都是關於如何限制對整個頁面的訪問...... – oym 2010-02-03 22:29:40

1

我不知道你是否還需要一個答案,因爲你的問題是在二月,但一旦用戶已經通過SS登錄,您可以在您的控制器獲得SS認證對象爲:

SecurityContextHolder.getContext().getAuthentication(); 

我所做的是我創建自己的Authentication類並將其包裝在Spring的Authentication類中,所以如果我更改提供者,我只需使用新提供者來擴展Authentication類。然後,我將包裝器放入會話中,以便我可以隨時通過OGNL查詢身份驗證對象,隨時瞭解是否有人登錄並瞭解詳細信息。

即:

Authentication auth = SecurityContextHolder.getContext().getAuthentication(); 
if (auth.isAuthenticated()) { 
    session.put("authentication", auth); 
} 

到註銷,根本無效會話

session.invalidate(); 

我也做種用SS一招。由於SS訪問安全領域(相同工作流程j_security_check)時自動提供的表單登錄,您可以定義登錄指向並不在安全領域存在的頁面:

<a href="my_secured_realm/non_existant_page">click here to sign in</a> 

SS會那麼火登錄頁面。然後,無論您使用什麼框架,您都可以在登錄後攔截以獲取Authentication對象。

希望這會有所幫助。