我对Spring安全性很新,只是通过参考,做了一些例子。我强烈缺少的一个功能(我想,似乎没有其他任何人似乎错过它)是向用户提供自定义信息的原因或访问被拒绝的原因。例如。我想通知用户他无法访问模块A或者需要获得角色访问权限等等。
我看了一下角色界面,但这些信息似乎迷失了:
int vote(Authentication authentication, Object object, List<ConfigAttribute> config);
Spring Security Access Denied logging with missing role 这就是说,我必须提供 AccessDecisionManager 的自定义实现。
但是如果访问被拒绝,那么实际的实现怎么能提供特定的信息呢?以及如何将其挂钩到春季安全? 对于初学者来说,简单的基于角色的访问就足够了。任何人都能提供这方面的例子吗?
答案 0 :(得分:2)
查看AffirmativeBased
- DecisionManager。您可以通过AccessDeniedException
添加一些其他信息来增强它。
但是,从Voter
s为什么他们为了访问权限而获得原因并不容易。 (我希望你会找到一些命名模式,或者你甚至可以扩展选民)。
这是如何配置自定义DecisionManager的示例
<security:http auto-config="true" access-decision-manager-ref="myDecisionManager">
<bean id="myAccessDecisionManager"
class="MyAffirmativeBasedDecisionManager">
<constructor-arg name="decisionVoters">
<list>
<ref bean="roleVoter" />
<ref bean="authenticatedVoter" />
<ref bean="preAdviceVoter" />
</list>
</constructor-arg>
</bean>
<bean id="roleVoter" class="org.springframework.security.access.vote.RoleVoter" />
<bean id="authenticatedVoter"
class="org.springframework.security.access.vote.AuthenticatedVoter" />
<bean id="preAdviceVoter"
class="org.springframework.security.access.prepost.PreInvocationAuthorizationAdviceVoter">
<constructor-arg ref="exprPreInvocationAdvice" />
</bean>
<bean
class="org.springframework.security.access.expression.method.ExpressionBasedPreInvocationAdvice"
id="exprPreInvocationAdvice">
<property name="expressionHandler" ref="methodExprHandler" />
</bean>
<bean id="methodExprHandler"
class="org.springframework.security.access.expression.method.ExtensibleMethodSecurityExpressionHandler">
<property name="methodSecurityExpressionRootFactory">
<bean
class="com.queomedia.infrastructure.security.spring.MethodSecurityExpressionRootFactoryImpl" />
</property>
</bean>