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?
刚想通了: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)