我正在使用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?
答案 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>