public class

JdbcMutableAclService

extends JdbcAclService
implements MutableAclService
java.lang.Object
   ↳ org.springframework.security.acls.jdbc.JdbcAclService
     ↳ org.springframework.security.acls.jdbc.JdbcMutableAclService

Class Overview

Provides a base JDBC implementation of MutableAclService.

The default settings are for HSQLDB. If you are using a different database you will probably need to set the sidIdentityQuery and classIdentityQuery properties appropriately. The other queries, SQL inserts and updates can also be customized to accomodate schema variations, but must produce results consistent with those expected by the defaults.

See the appendix of the Spring Security reference manual for more information on the expected schema and how it is used. Information on using PostgreSQL is also included.

Summary

[Expand]
Inherited Fields
From class org.springframework.security.acls.jdbc.JdbcAclService
Public Constructors
JdbcMutableAclService(DataSource dataSource, LookupStrategy lookupStrategy, AclCache aclCache)
Public Methods
MutableAcl createAcl(ObjectIdentity objectIdentity)
Creates an empty Acl object in the database.
void deleteAcl(ObjectIdentity objectIdentity, boolean deleteChildren)
Removes the specified entry from the database.
void setClassIdentityQuery(String classIdentityQuery)
Sets the query that will be used to retrieve the identity of a newly created row in the acl_class table.
void setClassPrimaryKeyQuery(String selectClassPrimaryKey)
void setDeleteEntryByObjectIdentityForeignKeySql(String deleteEntryByObjectIdentityForeignKey)
void setDeleteObjectIdentityByPrimaryKeySql(String deleteObjectIdentityByPrimaryKey)
void setForeignKeysInDatabase(boolean foreignKeysInDatabase)
void setInsertClassSql(String insertClass)
void setInsertEntrySql(String insertEntry)
void setInsertObjectIdentitySql(String insertObjectIdentity)
void setInsertSidSql(String insertSid)
void setObjectIdentityPrimaryKeyQuery(String selectObjectIdentityPrimaryKey)
void setSidIdentityQuery(String sidIdentityQuery)
Sets the query that will be used to retrieve the identity of a newly created row in the acl_sid table.
void setSidPrimaryKeyQuery(String selectSidPrimaryKey)
void setUpdateObjectIdentity(String updateObjectIdentity)
MutableAcl updateAcl(MutableAcl acl)
This implementation will simply delete all ACEs in the database and recreate them on each invocation of this method.
Protected Methods
void createEntries(MutableAcl acl)
Creates a new row in acl_entry for every ACE defined in the passed MutableAcl object.
void createObjectIdentity(ObjectIdentity object, Sid owner)
Creates an entry in the acl_object_identity table for the passed ObjectIdentity.
Long createOrRetrieveClassPrimaryKey(String type, boolean allowCreate)
Retrieves the primary key from acl_class, creating a new row if needed and the allowCreate property is true.
Long createOrRetrieveSidPrimaryKey(Sid sid, boolean allowCreate)
Retrieves the primary key from acl_sid, creating a new row if needed and the allowCreate property is true.
void deleteEntries(Long oidPrimaryKey)
Deletes all ACEs defined in the acl_entry table belonging to the presented ObjectIdentity primary key.
void deleteObjectIdentity(Long oidPrimaryKey)
Deletes a single row from acl_object_identity that is associated with the presented ObjectIdentity primary key.
Long retrieveObjectIdentityPrimaryKey(ObjectIdentity oid)
Retrieves the primary key from the acl_object_identity table for the passed ObjectIdentity.
void updateObjectIdentity(MutableAcl acl)
Updates an existing acl_object_identity row, with new information presented in the passed MutableAcl object.
[Expand]
Inherited Methods
From class org.springframework.security.acls.jdbc.JdbcAclService
From class java.lang.Object
From interface org.springframework.security.acls.model.AclService
From interface org.springframework.security.acls.model.MutableAclService

Public Constructors

public JdbcMutableAclService (DataSource dataSource, LookupStrategy lookupStrategy, AclCache aclCache)

Public Methods

public MutableAcl createAcl (ObjectIdentity objectIdentity)

Creates an empty Acl object in the database. It will have no entries. The returned object will then be used to add entries.

Parameters
objectIdentity the object identity to create
Returns
  • an ACL object with its ID set

public void deleteAcl (ObjectIdentity objectIdentity, boolean deleteChildren)

Removes the specified entry from the database.

Parameters
objectIdentity the object identity to remove
deleteChildren whether to cascade the delete to children

public void setClassIdentityQuery (String classIdentityQuery)

Sets the query that will be used to retrieve the identity of a newly created row in the acl_class table.

Parameters
classIdentityQuery the query, which should return the identifier. Defaults to call identity()

public void setClassPrimaryKeyQuery (String selectClassPrimaryKey)

public void setDeleteEntryByObjectIdentityForeignKeySql (String deleteEntryByObjectIdentityForeignKey)

public void setDeleteObjectIdentityByPrimaryKeySql (String deleteObjectIdentityByPrimaryKey)

public void setForeignKeysInDatabase (boolean foreignKeysInDatabase)

Parameters
foreignKeysInDatabase if false this class will perform additional FK constrain checking, which may cause deadlocks (the default is true, so deadlocks are avoided but the database is expected to enforce FKs)

public void setInsertClassSql (String insertClass)

public void setInsertEntrySql (String insertEntry)

public void setInsertObjectIdentitySql (String insertObjectIdentity)

public void setInsertSidSql (String insertSid)

public void setObjectIdentityPrimaryKeyQuery (String selectObjectIdentityPrimaryKey)

public void setSidIdentityQuery (String sidIdentityQuery)

Sets the query that will be used to retrieve the identity of a newly created row in the acl_sid table.

Parameters
sidIdentityQuery the query, which should return the identifier. Defaults to call identity()

public void setSidPrimaryKeyQuery (String selectSidPrimaryKey)

public void setUpdateObjectIdentity (String updateObjectIdentity)

public MutableAcl updateAcl (MutableAcl acl)

This implementation will simply delete all ACEs in the database and recreate them on each invocation of this method. A more comprehensive implementation might use dirty state checking, or more likely use ORM capabilities for create, update and delete operations of MutableAcl.

Parameters
acl to modify

Protected Methods

protected void createEntries (MutableAcl acl)

Creates a new row in acl_entry for every ACE defined in the passed MutableAcl object.

Parameters
acl containing the ACEs to insert

protected void createObjectIdentity (ObjectIdentity object, Sid owner)

Creates an entry in the acl_object_identity table for the passed ObjectIdentity. The Sid is also necessary, as acl_object_identity has defined the sid column as non-null.

Parameters
object to represent an acl_object_identity for
owner for the SID column (will be created if there is no acl_sid entry for this particular Sid already)

protected Long createOrRetrieveClassPrimaryKey (String type, boolean allowCreate)

Retrieves the primary key from acl_class, creating a new row if needed and the allowCreate property is true.

Parameters
type to find or create an entry for (often the fully-qualified class name)
allowCreate true if creation is permitted if not found
Returns
  • the primary key or null if not found

protected Long createOrRetrieveSidPrimaryKey (Sid sid, boolean allowCreate)

Retrieves the primary key from acl_sid, creating a new row if needed and the allowCreate property is true.

Parameters
sid to find or create
allowCreate true if creation is permitted if not found
Returns
  • the primary key or null if not found
Throws
IllegalArgumentException if the Sid is not a recognized implementation.

protected void deleteEntries (Long oidPrimaryKey)

Deletes all ACEs defined in the acl_entry table belonging to the presented ObjectIdentity primary key.

Parameters
oidPrimaryKey the rows in acl_entry to delete

protected void deleteObjectIdentity (Long oidPrimaryKey)

Deletes a single row from acl_object_identity that is associated with the presented ObjectIdentity primary key.

We do not delete any entries from acl_class, even if no classes are using that class any longer. This is a deadlock avoidance approach.

Parameters
oidPrimaryKey to delete the acl_object_identity

protected Long retrieveObjectIdentityPrimaryKey (ObjectIdentity oid)

Retrieves the primary key from the acl_object_identity table for the passed ObjectIdentity. Unlike some other methods in this implementation, this method will NOT create a row (use createObjectIdentity(ObjectIdentity, Sid) instead).

Parameters
oid to find
Returns
  • the object identity or null if not found

protected void updateObjectIdentity (MutableAcl acl)

Updates an existing acl_object_identity row, with new information presented in the passed MutableAcl object. Also will create an acl_sid entry if needed for the Sid that owns the MutableAcl.

Parameters
acl to modify (a row must already exist in acl_object_identity)
Throws
NotFoundException if the ACL could not be found to update.