Java 列表中的Spring安全ACL
我有一个关于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); } 但当我想做
@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);
}