2011-09-20 116 views
3

我与弹簧安全工作,我需要实现我自己的PermissionEvaluator(以下答案我other question编写自定义PermissionEvaluator的spring-security - 如何注入DAO服务?

但是看标准执行AclPermissionEvaluatorhere我注意到,该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进入评估程序,这样我可以访问数据我可以把它注射,意思是PermissionEvaluator Spring管理?或者我如何让我的dataProvider进入Evaluator?

回答

5

就想通了:该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信息。

要连接这一切,我们将按照弹簧安全触点例如:

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