2014-02-17 33 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> 
相关问题