浏览代码

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

Ben Alex 17 年之前
父节点
当前提交
833b76c011

+ 2 - 2
acl/src/main/java/org/springframework/security/acls/jdbc/JdbcAclService.java

@@ -81,13 +81,13 @@ public class JdbcAclService implements AclService {
                     public Object mapRow(ResultSet rs, int rowNum)
                         throws SQLException {
                         String javaType = rs.getString("class");
-                        String identifier = rs.getString("obj_id");
+                        Long identifier = rs.getLong("obj_id");
 
                         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 {

+ 7 - 2
acl/src/test/java/org/springframework/security/acls/jdbc/JdbcAclServiceTests.java

@@ -20,6 +20,7 @@ import org.springframework.security.Authentication;
 import org.springframework.security.GrantedAuthority;
 import org.springframework.security.GrantedAuthorityImpl;
 import org.springframework.security.acls.AccessControlEntry;
+import org.springframework.security.acls.Acl;
 import org.springframework.security.acls.AlreadyExistsException;
 import org.springframework.security.acls.ChildrenExistException;
 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
      */
-/*    public void testDeleteAclAlsoDeletesChildren() throws Exception {
+    public void testDeleteAclAlsoDeletesChildren() throws Exception {
         ObjectIdentity topParentOid = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Long(100));
         ObjectIdentity middleParentOid = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Long(101));
         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
         jdbcMutableAclService.deleteAcl(middleParentOid, true);
         
@@ -251,7 +256,7 @@ public class JdbcAclServiceTests extends AbstractTransactionalDataSourceSpringCo
         Acl acl = jdbcMutableAclService.readAclById(topParentOid);
         assertNotNull(acl);
         assertEquals(((MutableAcl) acl).getObjectIdentity(), topParentOid);
-    }*/
+    }
     
     public void testConstructorRejectsNullParameters() throws Exception {
         try {