在实践中,往往各个角色的权限存在某种包含关系。假设系统中角色划分如下:ROLE_supervisor,ROLE_teller,ROLE_user,超级用户拥有出纳的权限。 那边对于拥有超级用户角色的员工,为了对其赋予出纳权限,那么我们可以对其赋予出纳角色;或者我们也可以改变出纳权限的定义,拥有超级用户角色和出纳角色的员工都拥有出纳权限。这两种方法都不够完美,方案一显得冗余,需要对一个员工赋予多个角色,方案二显得角色的权限划分不单一。spring security 角色(ROLE)继承能完美的解决该问题
本文由博主javacoder.cn原创,转载请注明出处
此处示例能更直观的说明问题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<beans:bean id="roleHierarchy" class="org.springframework.security.access.hierarchicalroles.RoleHierarchyImpl"> <beans:property name="hierarchy"> <beans:value> ROLE_supervisor > ROLE_teller ROLE_teller > ROLE_user </beans:value> </beans:property> </beans:bean> <beans:bean id="methodExpressionHandler" class="org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler"> <beans:property name="roleHierarchy" ref="roleHierarchy" /> </beans:bean> <beans:bean id="expressionHandler" class="org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler"> <beans:property name="roleHierarchy" ref="roleHierarchy" /> </beans:bean> <global-method-security pre-post-annotations="enabled" > <expression-handler ref="methodExpressionHandler"/> </global-method-security> <http> <expression-handler ref="expressionHandler"/> </http> |
RoleHierarchyImpl定义了权限的包含关系,"ROLE_supervisor > ROLE_teller"中的">"表示包含关系。然后定义MethodSecurityExpressionHandler和WebSecurityExpressionHandler bean,最后对<global-method-security >和<http>元素添加<expression-handler>子元素,让其指向定义的SecurityExpressionHandler。
Posted in: Spring Security
Comments are closed.