Lee*_*iam 3 spring spring-security
我在Spring Security中使用角色层次结构.
<beans:bean id="roleVoter" class="org.springframework.security.access.vote.RoleHierarchyVoter">
<beans:constructor-arg ref="roleHierarchy" />
</beans:bean>
<beans:bean id="roleHierarchy"
class="org.springframework.security.access.hierarchicalroles.RoleHierarchyImpl">
<beans:property name="hierarchy">
<beans:value>
ROLE_USER > ROLE_GUEST
</beans:value>
</beans:property>
</beans:bean>
Run Code Online (Sandbox Code Playgroud)
我正在使用保护切入点来保护方法
<global-method-security secured-annotations="enabled" pre-post-annotations="enabled">
<protect-pointcut expression="execution(* my.package.*(..))"
access="ROLE_GUEST"/>
</global-method-security>
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用具有权限ROLE_USER的用户登录,则会出现AccessDeniedException.如果我指定了protect-pointcut,我没有问题access="ROLE_GUEST,ROLE_USER".
我错过了一些步骤吗?仅供参考,我使用的是Spring 3.0.5.
谢谢.
小智 8
不要忘记添加WebExpressionVoter以便能够在http元素中使用表达式:
<sec:http use-expressions="true" access-decision-manager-ref="accessDecisionManager">
<sec:intercept-url pattern="/index.html" access="hasRole('ROLE_AUTHENTICATED')" />
<sec:intercept-url pattern="/admin" access="hasRole('ROLE_SUPERVISOR')" />
...
Run Code Online (Sandbox Code Playgroud)
所以我最终得到一个包含角色层次结构投票者和WebExpressionVoter的accessDecisionManager,两者都使用相同的roleHierarchyImpl bean.
<bean id="accessDecisionManager" class="org.springframework.security.access.vote.AffirmativeBased">
<property name="decisionVoters">
<list>
<ref bean="roleHierarchyVoter" />
<bean class="org.springframework.security.web.access.expression.WebExpressionVoter">
<property name="expressionHandler">
<bean class="org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler">
<property name="roleHierarchy" ref="roleHierarchy"/>
</bean>
</property>
</bean>
<bean class="org.springframework.security.access.vote.AuthenticatedVoter"/>
</list>
</property>
</bean>
<bean id="roleHierarchyVoter" 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_SUPERVISOR > ROLE_XX
ROLE_XX > ROLE_AUTHENTICATED
ROLE_AUTHENTICATED > ROLE_UNAUTHENTICATED
</value>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)
(春季3.1)
| 归档时间: |
|
| 查看次数: |
3028 次 |
| 最近记录: |