2014-10-27 49 views
2

我有一個新項目,我想實施spring-security以及spring framekwork的其他組件。如何爲鏈接實現基於視圖的彈簧安全性?

我計劃實施春季安全到2級,請求URL級別視圖級

  • 對於請求URL級別,我會用<intercept-url>標籤限制只有授權用戶才能訪問URL。

  • 對於視圖級別安全性,我將它用於應用程序的兩個部分;

    • 對於網絡應用程序菜單限制授權用戶的菜單。
    • 頁面內部限制授權用戶的頁面的某些部分。

我有是關於實施春季安全菜單環節的混亂。
因此,我需要使用彈簧taglibs<authorize>標籤的url屬性(重用<intercept-url>模式/接入組合),那麼我就需要手工編寫菜單鏈接是這樣的:

<security:authorize url="/admin/superadmin/**" > 
     <a href="superadmin/index.jsp">Super admin page</a> 
</security:authorize> 

如果我下面攔截的URL規則:

<intercept-url pattern="/admin/superadmin/**" access="hasRole('ROLE_SUPER_ADMIN')" /> 

的一點是,我在數據庫表中的所有規則,我想提請動態基於保存在表中的角色/鏈接的鏈接。

所以,問題是如何繪製菜單鏈接動態,並在同一時間仍然使用<authorize>標籤庫?

+0

如果您動態地繪製菜單,它會是一個選擇只繪製可訪問的項目?換句話說,當你繪製菜單時,你有權訪問當前登錄的用戶嗎? – 2014-10-27 09:09:07

+0

是的,當然我可以訪問用戶和他的權限(角色),但這種情況下,我將生成授權標記的代碼..或者我根本不會使用它。正確? – 2014-10-27 09:24:02

+0

您能否提供更多說明? – 2014-10-27 09:44:01

回答

2

<authorize>標籤可以自動執行您所需的操作。我想你的菜單JSP看起來像(無安全部分):

<c:foreach items="${menus}" var="menu"> 
    <a href=${menu.url}>${menu.label}</a> 
</c:foreach> 

您可以簡單地添加安全性的方法:

<c:foreach items="${menus}" var="menu"> 
    <security:authorize url=${menu.url}> 
     <a href=${menu.url}>${menu.label}</a> 
    </security:authorize> 
</c:foreach> 

Spring Security的參考手冊說,當你使用的命名空間的authorize標籤爲提供的URL創建一個虛擬web請求,並調用安全攔截器以查看請求是成功還是失敗。這允許您委派到您在命名空間配置中使用intercept-url聲明定義的訪問控制設置,並且不必在JSP中複製信息(例如所需的角色)