我正在使用 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 以便我可以访问数据?我可以注入(inject)它,这意味着 PermissionEvaluator Spring 是管理的吗?或者我如何让我的 dataProvider 进入 Evaluator?
最佳答案
刚刚想通了:PermissionEvaluator 是 Spring 管理的,所以
@Inject
private PermissionManager permissionManager;
会工作得很好。
编辑:
对于我们的项目,我们将实现我们自己的 PermissionResolver 可能会扩展标准实现:
public class OurPermissionEvaluator extends AclPermissionEvaluator{
public CombinedPermissionEvaluator(AclService aclService) {
super(aclService);
}
并注入(inject)自定义 ACLService(遵循 this 教程)
public class OurAclServiceImpl implements AclService {
我们从自定义数据库结构中检索 ACL 信息的地方。
为了连接它,我们将遵循 Spring 安全触点示例:
<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>
关于permissions - spring-security 编写自定义 PermissionEvaluator - 如何注入(inject) DAO 服务?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7484168/