Spring Security 3 - 向(角色)选民添加信息

时间:2012-10-08 12:05:40

标签: spring spring-security roles

我对Spring安全性很新,只是通过参考,做了一些例子。我强烈缺少的一个功能(我想,似乎没有其他任何人似乎错过它)是向用户提供自定义信息的原因或访问被拒绝的原因。例如。我想通知用户他无法访问模块A或者需要获得角色访问权限等等。

我看了一下角色界面,但这些信息似乎迷失了:

int vote(Authentication authentication, Object object, List<ConfigAttribute> config);

Spring Security Access Denied logging with missing role 这就是说,我必须提供 AccessDecisionManager 的自定义实现。

但是如果访问被拒绝,那么实际的实现怎么能提供特定的信息呢?以及如何将其挂钩到春季安全? 对于初学者来说,简单的基于角色的访问就足够了。任何人都能提供这方面的例子吗?

1 个答案:

答案 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>