spring-security编写自定义PermissionEvaluator - 如何注入DAO服务?

时间:2011-09-20 11:10:18

标签: permissions constructor spring-security inject

我正在使用Spring-Security,我需要实现自己的PermissionEvaluator(根据other question的答案。

然而,看一下标准实现AclPermissionEvaluator here我注意到,DAO是通过构造函数设置的。

如果我声明我的自定义PermissionEvaluator:

<global-method-security secured-annotations="enabled" pre-post-annotations="enabled">
    <expression-handler ref="expressionHandler"/>
</global-method-security>

<beans:bean id="expressionHandler" class="org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler">
    <beans:property name="permissionEvaluator">
        <beans:bean id="permissionEvaluator" class="com.npacemo.permissions.SomePermissionsEvaluator"/>
    </beans:property>
</beans:bean>

在哪里可以将DAO放入Evaluator中以便我可以访问数据?我可以注入它,意味着PermissionEvaluator Spring管理了吗?或者如何将我的dataProvider放入Evaluator?

1 个答案:

答案 0 :(得分:6)

刚想通了:PermissionEvaluator是Spring管理的,所以

@Inject 
private PermissionManager permissionManager;

工作得很好。


修改 对于我们的项目,我们将实现我们自己的PermissionResolver,可能会扩展标准的实现:

public class OurPermissionEvaluator extends AclPermissionEvaluator{


    public CombinedPermissionEvaluator(AclService aclService) {
        super(aclService);
    }

并注入自定义ACLService(在this教程之后)

public class OurAclServiceImpl implements AclService {

我们从自定义数据库结构中检索ACL信息。

要连接所有内容,我们将遵循spring-security联系人示例:

<b:bean id="permissionEvaluator" class="path.to.OurPermissionEvaluator">
    <b:constructor-arg ref="aclService"/>
</b:bean>

因此必须声明aclService:

  <bean id="aclService" class="path.to.OurAclServiceImpl">
     <constructor args here... >
  </bean>