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

Pet*_*ete 4 permissions constructor inject spring-security

我正在使用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>
Run Code Online (Sandbox Code Playgroud)

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

Pet*_*ete 6

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

@Inject 
private PermissionManager permissionManager;
Run Code Online (Sandbox Code Playgroud)

会工作得很好.


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

public class OurPermissionEvaluator extends AclPermissionEvaluator{


    public CombinedPermissionEvaluator(AclService aclService) {
        super(aclService);
    }
Run Code Online (Sandbox Code Playgroud)

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

public class OurAclServiceImpl implements AclService {
Run Code Online (Sandbox Code Playgroud)

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

为了连接它,我们将遵循spring-security联系人示例:

<b:bean id="permissionEvaluator" class="path.to.OurPermissionEvaluator">
    <b:constructor-arg ref="aclService"/>
</b:bean>
Run Code Online (Sandbox Code Playgroud)

因此必须声明aclService:

  <bean id="aclService" class="path.to.OurAclServiceImpl">
     <constructor args here... >
  </bean>
Run Code Online (Sandbox Code Playgroud)