2014-02-17 41 views
0

爲了保護我的REST API,我使用@Secured({「ROLE_ADMIN」,「ROLE_SUPERADMIN」,...一些更多}等 但我必須重複這一點我發現https://burtbeckwith.com/blog/?p=1398 Groovy,但找不到如何在JAVA中執行它 從我的理解,我覺得我必須編寫一個自定義註釋(例如@MySecured(「OnlyAdmins」))將工作作爲一種預處理器,將被替換爲上面的@Secured註釋 然而,我想知道是否有更好的方法來實現相同的目的呢?如果有人可以指向我一些現成的用於實現此目的的自定義註釋源代碼。如何避免在@Secured彈簧安全中重複字符串數組

在此先感謝

回答

1

要避免這種情況,請創建父角色ALL_ADMINS,並設置彈簧安全層級角色,請參閱documentation以瞭解更多詳細信息。

創建與配置的角色層次結構中的角色選民:

<bean id="roleVoter" class="org.springframework.security.access.vote.RoleHierarchyVoter"> 
    <constructor-arg ref="roleHierarchy" /> 
</bean> 
<bean id="roleHierarchy" 
     class="org.springframework.security.access.hierarchicalroles.RoleHierarchyImpl"> 
    <property name="hierarchy"> 
     <value> 
      ROLE_ALL_ADMINS > ROLE_ADMIN 
      ROLE_ALL_ADMINS > ROLE_SUPERADMIN 
      ... 
     </value> 
    </property> 
</bean> 

然後把它應用到自定義訪問決策管理:

<beans:bean id="accessDecisionManager" class="org.springframework.security.access.vote.AffirmativeBased"> 
     <beans:property name="decisionVoters"> 
      <beans:list> 
       <beans:bean ref="roleVoter" /> 
       <beans:bean class="org.springframework.security.access.vote.AuthenticatedVoter"/> 
      </beans:list> 
     </beans:property> 
    </beans:bean> 

和持續配置自定義訪問決策管理器通過使用@Secured

<global-method-security access-decision-manager-ref="accessDecisionManager"> 
    ... 
</global-method-security> 
相關問題