@ -35,6 +35,7 @@ import org.springframework.core.convert.ConversionException;
import org.springframework.core.convert.ConversionService ;
import org.springframework.core.convert.ConversionService ;
import org.springframework.jdbc.core.JdbcTemplate ;
import org.springframework.jdbc.core.JdbcTemplate ;
import org.springframework.jdbc.core.ResultSetExtractor ;
import org.springframework.jdbc.core.ResultSetExtractor ;
import org.springframework.security.acls.domain.* ;
import org.springframework.security.acls.domain.AccessControlEntryImpl ;
import org.springframework.security.acls.domain.AccessControlEntryImpl ;
import org.springframework.security.acls.domain.AclAuthorizationStrategy ;
import org.springframework.security.acls.domain.AclAuthorizationStrategy ;
import org.springframework.security.acls.domain.AclImpl ;
import org.springframework.security.acls.domain.AclImpl ;
@ -42,7 +43,6 @@ import org.springframework.security.acls.domain.AuditLogger;
import org.springframework.security.acls.domain.DefaultPermissionFactory ;
import org.springframework.security.acls.domain.DefaultPermissionFactory ;
import org.springframework.security.acls.domain.DefaultPermissionGrantingStrategy ;
import org.springframework.security.acls.domain.DefaultPermissionGrantingStrategy ;
import org.springframework.security.acls.domain.GrantedAuthoritySid ;
import org.springframework.security.acls.domain.GrantedAuthoritySid ;
import org.springframework.security.acls.domain.ObjectIdentityImpl ;
import org.springframework.security.acls.domain.PermissionFactory ;
import org.springframework.security.acls.domain.PermissionFactory ;
import org.springframework.security.acls.domain.PrincipalSid ;
import org.springframework.security.acls.domain.PrincipalSid ;
import org.springframework.security.acls.model.AccessControlEntry ;
import org.springframework.security.acls.model.AccessControlEntry ;
@ -51,6 +51,7 @@ import org.springframework.security.acls.model.AclCache;
import org.springframework.security.acls.model.MutableAcl ;
import org.springframework.security.acls.model.MutableAcl ;
import org.springframework.security.acls.model.NotFoundException ;
import org.springframework.security.acls.model.NotFoundException ;
import org.springframework.security.acls.model.ObjectIdentity ;
import org.springframework.security.acls.model.ObjectIdentity ;
import org.springframework.security.acls.model.ObjectIdentityGenerator ;
import org.springframework.security.acls.model.Permission ;
import org.springframework.security.acls.model.Permission ;
import org.springframework.security.acls.model.PermissionGrantingStrategy ;
import org.springframework.security.acls.model.PermissionGrantingStrategy ;
import org.springframework.security.acls.model.Sid ;
import org.springframework.security.acls.model.Sid ;
@ -109,6 +110,8 @@ public class BasicLookupStrategy implements LookupStrategy {
private final AclAuthorizationStrategy aclAuthorizationStrategy ;
private final AclAuthorizationStrategy aclAuthorizationStrategy ;
private ObjectIdentityGenerator objectIdentityGenerator ;
private PermissionFactory permissionFactory = new DefaultPermissionFactory ( ) ;
private PermissionFactory permissionFactory = new DefaultPermissionFactory ( ) ;
private final AclCache aclCache ;
private final AclCache aclCache ;
@ -134,6 +137,7 @@ public class BasicLookupStrategy implements LookupStrategy {
private AclClassIdUtils aclClassIdUtils ;
private AclClassIdUtils aclClassIdUtils ;
/ * *
/ * *
* Constructor accepting mandatory arguments
* Constructor accepting mandatory arguments
* @param dataSource to access the database
* @param dataSource to access the database
@ -154,6 +158,7 @@ public class BasicLookupStrategy implements LookupStrategy {
* /
* /
public BasicLookupStrategy ( DataSource dataSource , AclCache aclCache ,
public BasicLookupStrategy ( DataSource dataSource , AclCache aclCache ,
AclAuthorizationStrategy aclAuthorizationStrategy , PermissionGrantingStrategy grantingStrategy ) {
AclAuthorizationStrategy aclAuthorizationStrategy , PermissionGrantingStrategy grantingStrategy ) {
Assert . notNull ( dataSource , "DataSource required" ) ;
Assert . notNull ( dataSource , "DataSource required" ) ;
Assert . notNull ( aclCache , "AclCache required" ) ;
Assert . notNull ( aclCache , "AclCache required" ) ;
Assert . notNull ( aclAuthorizationStrategy , "AclAuthorizationStrategy required" ) ;
Assert . notNull ( aclAuthorizationStrategy , "AclAuthorizationStrategy required" ) ;
@ -162,6 +167,7 @@ public class BasicLookupStrategy implements LookupStrategy {
this . aclCache = aclCache ;
this . aclCache = aclCache ;
this . aclAuthorizationStrategy = aclAuthorizationStrategy ;
this . aclAuthorizationStrategy = aclAuthorizationStrategy ;
this . grantingStrategy = grantingStrategy ;
this . grantingStrategy = grantingStrategy ;
this . objectIdentityGenerator = new ObjectIdentityRetrievalStrategyImpl ( ) ;
this . aclClassIdUtils = new AclClassIdUtils ( ) ;
this . aclClassIdUtils = new AclClassIdUtils ( ) ;
this . fieldAces . setAccessible ( true ) ;
this . fieldAces . setAccessible ( true ) ;
this . fieldAcl . setAccessible ( true ) ;
this . fieldAcl . setAccessible ( true ) ;
@ -488,6 +494,11 @@ public class BasicLookupStrategy implements LookupStrategy {
}
}
}
}
public void setObjectIdentityGenerator ( ObjectIdentityGenerator objectIdentityGenerator ) {
Assert . notNull ( objectIdentityGenerator , "The provided strategy has to be not null!" ) ;
this . objectIdentityGenerator = objectIdentityGenerator ;
}
public final void setConversionService ( ConversionService conversionService ) {
public final void setConversionService ( ConversionService conversionService ) {
this . aclClassIdUtils = new AclClassIdUtils ( conversionService ) ;
this . aclClassIdUtils = new AclClassIdUtils ( conversionService ) ;
}
}
@ -569,7 +580,7 @@ public class BasicLookupStrategy implements LookupStrategy {
// target id type, e.g. UUID.
// target id type, e.g. UUID.
Serializable identifier = ( Serializable ) rs . getObject ( "object_id_identity" ) ;
Serializable identifier = ( Serializable ) rs . getObject ( "object_id_identity" ) ;
identifier = BasicLookupStrategy . this . aclClassIdUtils . identifierFrom ( identifier , rs ) ;
identifier = BasicLookupStrategy . this . aclClassIdUtils . identifierFrom ( identifier , rs ) ;
ObjectIdentity objectIdentity = new ObjectIdentityImpl ( rs . getString ( "class" ) , identifier ) ;
ObjectIdentity objectIdentity = objectIdentityGenerator . createObjectIdentity ( identifier , rs . getString ( "class" ) ) ;
Acl parentAcl = null ;
Acl parentAcl = null ;
long parentAclId = rs . getLong ( "parent_object" ) ;
long parentAclId = rs . getLong ( "parent_object" ) ;