Java 列表中的Spring安全ACL

Java 列表中的Spring安全ACL,java,spring,spring-security,acl,Java,Spring,Spring Security,Acl,我有一个关于spring安全acl的问题 我有我的课,我有一个预自动化的方法,效果很好 @PreAuthorize("hasPermission(#test, write) or hasAnyRole('ROLE_ADMIN', 'ROLE_SUPERADMIN')") public void update(Test test) { testRepository.save(test); updateDeviceAcl(test); } 但当我想做

我有一个关于spring安全acl的问题

我有我的课,我有一个预自动化的方法,效果很好

@PreAuthorize("hasPermission(#test, write) or hasAnyRole('ROLE_ADMIN', 'ROLE_SUPERADMIN')")
    public void update(Test test) {
        testRepository.save(test);
        updateDeviceAcl(test);
    }
但当我想做清单上同样的事情时:

@PreAuthorize("hasPermission(#test, write) or hasAnyRole('ROLE_ADMIN', 'ROLE_SUPERADMIN')")
    public void update(List<Test> test) {
        testRepository.save(test);
        updateDeviceAcl(test);
    }
有可能这样做吗?我完全理解这种方法

ArrayList.getId()

应该是这样的

test.get(i.getId()


感谢您的回答

如果授权仅适用于完整列表,则要执行此操作,您必须将列表包装在包含
getId()
方法的列表包装器中:

public class ListWrapper { 
    private List<Test> tests;

    public Serializable getId() {
        ... some id ... 
    }
}
公共类ListWrapper{
私人列表测试;
公共可序列化的getId(){
…一些身份证。。。
}
}
要逐个验证,您需要仅为一个测试注释一个方法,而不是带有循环的方法:

public void update(List<Test> tests) {
    for (Test test : tests) {
        update(test);
    }
}

@PreAuthorize("hasPermission(#test, write) or hasAnyRole('ROLE_ADMIN', 'ROLE_SUPERADMIN')")
public void update(Test test) {
    testRepository.save(test);
    updateDeviceAcl(test);
}
公共作废更新(列表测试){
用于(测试:测试){
更新(测试);
}
}
@预授权(“hasPermission(#test,write)或hasAnyRole('ROLE#ADMIN','ROLE#SUPERADMIN'))
公共无效更新(测试){
testRepository.save(测试);
更新的DEVICECAL(测试);
}
如果您没有使用aspectJ编译时或加载时编织来应用方面,那么将这两个方法放在单独的bean中,并将其中一个注入到另一个bean中。普通的JDK或CGLIB代理不会对可重入调用应用
@PreAuthorize
(或任何其他方面)

public void update(List<Test> tests) {
    for (Test test : tests) {
        update(test);
    }
}

@PreAuthorize("hasPermission(#test, write) or hasAnyRole('ROLE_ADMIN', 'ROLE_SUPERADMIN')")
public void update(Test test) {
    testRepository.save(test);
    updateDeviceAcl(test);
}