2014-05-22 184 views
0

有2個角色 1)ROLE_USER1 2)ROLE_USER2Spring MVC的註解和安全配置

我不希望添加的每URI在彈簧security.xml文件比如我有管理用戶模塊,在那裏我可以創建,更新,刪除和讀取用戶我有一個名爲用戶控制器的控制器。在控制器映射是

@RequestMapping (value="user/create") 
@RequestMapping (value="user/list") 
@RequestMapping (value="user/update") 
@RequestMapping (value="user/delete") 

我想ROLE_USER1只獲得「用戶/製造」所以在這種情況下,我必須在secruity.xml

而且ROLE_USER2添加URI「用戶/製造」 ROLE_USER1角色只能訪問「用戶/列表」和「用戶/刪除」,在這種情況下,我必須在security.xml中爲ROLE_USER2添加2個URI

我希望如果發生這種情況,我總是會給URL中的/ admin該管理員角色可以訪問

並且對於SuperAdmin URL wi會包含/超級管理員

而我只需要給/管理/ **和/超級管理員/ **在彈簧security.xml文件

但要實現上面的場景我必須添加多個映射在控制器單一行動。如果我添加多個動作,那麼我有Jsp動作問題。即有可能是因爲存在「/管理/用戶/創建」或「/超級管理員/用戶/創建」

我想保護的URL以最小的條目Spring.security.xml

問候

+0

爲什麼你需要2個網址? admin/user/create /或者甚至更好的'/ user/create'應該受到Spring Security的保護,並且只允許任一角色的訪問。您不想爲了安全性而添加大量的URI。 –

+0

是的..例子我創建了一個用戶控制器,其中所有與用戶相關的操作都被寫入。 因此,如果我想管理員只能訪問視圖用戶,那麼我必須在安全文件中添加所有URI。我不想在安全文件中添加每個URI –

+0

我不明白你想要什麼,你不想要多個URL,因爲這變成了一個保持地獄可以這麼說。在Spring Security中保護'/ admin/user/create'。請參閱http://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#authorize-requests –

回答

0

我不要認爲你應該爲admin和superadmin創建一個新的控制器。

相反,您應該只將角色添加到security.xml中的URL中。例如,如果您當前的security.xml配置如下

<intercept-url pattern="/user/create" access="hasAnyRole('ROLE_USER1')" />  
    <intercept-url pattern="/user/delete" access="hasAnyRole('ROLE_USER2')" /> 

您只需添加admin和superadmin角色,如下所示。

<intercept-url pattern="/user/create" access="hasAnyRole('ROLE_USER1', 'SuperAdmin', 'Admin')" />  
    <intercept-url pattern="/user/delete" access="hasAnyRole('ROLE_USER2', 'SuperAdmin', 'Admin')" /> 

在你的Java代碼,如果你有不同的角色,任何特殊的邏輯,你可以訪問當前角色的下方,切換邏輯。

SecurityContextHolder.getContext().getAuthentication().getAuthorities();