4

我正在使用 Spring-Security,我需要实现自己的 PermissionEvaluator(按照我的另一个问题的答案。

AclPermissionEvaluator 但是,在这里查看标准实现时,我注意到 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?

4

1 回答 1

6

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

@Inject 
private PermissionManager permissionManager;

会工作得很好。


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

public class OurPermissionEvaluator extends AclPermissionEvaluator{


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

并注入自定义 ACLService(遵循教程)

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>
于 2011-09-21T07:25:59.760 回答