SEC-676: Remove child ACLs from cache during delete.

This commit is contained in:
Ben Alex 2008-04-05 03:42:16 +00:00
parent 1036074d26
commit 833b76c011
2 changed files with 9 additions and 4 deletions

View File

@ -81,13 +81,13 @@ public class JdbcAclService implements AclService {
public Object mapRow(ResultSet rs, int rowNum) public Object mapRow(ResultSet rs, int rowNum)
throws SQLException { throws SQLException {
String javaType = rs.getString("class"); String javaType = rs.getString("class");
String identifier = rs.getString("obj_id"); Long identifier = rs.getLong("obj_id");
return new ObjectIdentityImpl(javaType, identifier); return new ObjectIdentityImpl(javaType, identifier);
} }
}); });
return (ObjectIdentityImpl[]) objects.toArray(new ObjectIdentityImpl[] {}); return (ObjectIdentityImpl[]) objects.toArray(new ObjectIdentityImpl[objects.size()]);
} }
public Acl readAclById(ObjectIdentity object, Sid[] sids) throws NotFoundException { public Acl readAclById(ObjectIdentity object, Sid[] sids) throws NotFoundException {

View File

@ -20,6 +20,7 @@ import org.springframework.security.Authentication;
import org.springframework.security.GrantedAuthority; import org.springframework.security.GrantedAuthority;
import org.springframework.security.GrantedAuthorityImpl; import org.springframework.security.GrantedAuthorityImpl;
import org.springframework.security.acls.AccessControlEntry; import org.springframework.security.acls.AccessControlEntry;
import org.springframework.security.acls.Acl;
import org.springframework.security.acls.AlreadyExistsException; import org.springframework.security.acls.AlreadyExistsException;
import org.springframework.security.acls.ChildrenExistException; import org.springframework.security.acls.ChildrenExistException;
import org.springframework.security.acls.MutableAcl; import org.springframework.security.acls.MutableAcl;
@ -225,11 +226,15 @@ public class JdbcAclServiceTests extends AbstractTransactionalDataSourceSpringCo
/** /**
* Test method that demonstrates eviction failure from cache - SEC-676 * Test method that demonstrates eviction failure from cache - SEC-676
*/ */
/* public void testDeleteAclAlsoDeletesChildren() throws Exception { public void testDeleteAclAlsoDeletesChildren() throws Exception {
ObjectIdentity topParentOid = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Long(100)); ObjectIdentity topParentOid = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Long(100));
ObjectIdentity middleParentOid = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Long(101)); ObjectIdentity middleParentOid = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Long(101));
ObjectIdentity childOid = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Long(102)); ObjectIdentity childOid = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Long(102));
// Check the childOid really is a child of middleParentOid
Acl childAcl = jdbcMutableAclService.readAclById(childOid);
assertEquals(middleParentOid, childAcl.getParentAcl().getObjectIdentity());
// Delete the mid-parent and test if the child was deleted, as well // Delete the mid-parent and test if the child was deleted, as well
jdbcMutableAclService.deleteAcl(middleParentOid, true); jdbcMutableAclService.deleteAcl(middleParentOid, true);
@ -251,7 +256,7 @@ public class JdbcAclServiceTests extends AbstractTransactionalDataSourceSpringCo
Acl acl = jdbcMutableAclService.readAclById(topParentOid); Acl acl = jdbcMutableAclService.readAclById(topParentOid);
assertNotNull(acl); assertNotNull(acl);
assertEquals(((MutableAcl) acl).getObjectIdentity(), topParentOid); assertEquals(((MutableAcl) acl).getObjectIdentity(), topParentOid);
}*/ }
public void testConstructorRejectsNullParameters() throws Exception { public void testConstructorRejectsNullParameters() throws Exception {
try { try {