我正在尝试在我的应用程序中实现 Spring Security ACL。我有许多要在其上使用 ACL 的类。
我在文档中看到,AOP 之前已经成功使用过。这是否意味着所有服务都应该有一个公共(public)接口(interface)来对对象进行 CRUD 以最大限度地重用建议?
或者在服务的save,update,delete方法中手动insert,delete,...是否正常?
我找不到很多关于人们如何使用该框架的例子。
最佳答案
---- 实体删除的监听器(包括级联删除)-----
package com.acme.model.aspects;
import javax.annotation.PostConstruct;
import javax.persistence.PreRemove;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;
import org.springframework.data.domain.Persistable;
import com.acme.PermissionService;
@Component
public class ObjectIdentityListener {
private static final Logger LOG = LoggerFactory.getLogger(ObjectIdentityListener.class);
static private PermissionService permissionService;
@Autowired(required = true)
@Qualifier("permissionService")
public void setSearchService(PermissionService _permissionService)
{
permissionService = _permissionService;
}
@PreRemove
public void preRemove(Object object) {
if(object instanceof Persistable) {
LOG.info("Deleting object identity for class {} id {} ", persistable.getClass(), persistable.getId());
permissionService.deleteObjectIdentity((Persistable) object);
}
}
@PostConstruct
public void init() {
Assert.notNull(permissionService, "'permissionService' is required");
}
}
---- permissionService的删除方法----
public void deleteObjectIdentity(Persistable persistable) {
try{
MutableAcl acl = (MutableAcl) mutableAclService.readAclById(identity(persistable));
mutableAclService.deleteAcl(acl.getObjectIdentity(), true);
} catch (NotFoundException e){
LOG.info("Could not find ACL for target {}", persistable);
}
}
关于java - 使用 Spring Security ACL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21340310/