I'm using Hibernate in my Roo-WebApp, too. Because the DDLs given in Appendix A of Spring Security 3.x documentation vary for different databases (eg. HSQL and PostgreSQL) I wanted Hibernate to create the DDLs according to the database set by hibernate.dialect.
Therefore I created some Roo Entity classes (which I never use in my application code) for letting hibenrate create the ACL tables. The DDL created by hibernate match the DDLs given in Appendix A of Spring Security 3.x documentation.
I'm not sure if this is a well designed solution, but it works
.
Here my Java classes:
AclClass.java
Code:
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import org.springframework.roo.addon.entity.RooEntity;
import org.springframework.roo.addon.javabean.RooJavaBean;
import org.springframework.roo.addon.tostring.RooToString;
@Entity
@RooJavaBean
@RooToString
@RooEntity(versionField = "")
@Table(name = "acl_class")
public class AclClass {
@Column(name = "class", nullable=false, unique=true)
private String clazz;
}
AclEntry.java
Code:
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
import javax.validation.constraints.NotNull;
import org.springframework.roo.addon.entity.RooEntity;
import org.springframework.roo.addon.javabean.RooJavaBean;
import org.springframework.roo.addon.tostring.RooToString;
@Entity
@RooJavaBean
@RooToString
@RooEntity(versionField = "")
@Table(name = "acl_entry", uniqueConstraints = { @UniqueConstraint(columnNames = {
"acl_object_identity", "ace_order" }) })
public class AclEntry {
@NotNull
@ManyToOne(targetEntity = AclObjectIdentity.class)
@JoinColumn
private AclObjectIdentity acl_object_identity;
@NotNull
private Integer ace_order;
@NotNull
@ManyToOne(targetEntity = AclSid.class)
@JoinColumn
private AclSid sid;
@NotNull
private Integer mask;
@NotNull
private boolean granting;
@NotNull
private boolean audit_success;
@NotNull
private boolean audit_failure;
}
AclObjectIdentity.java
Code:
import javax.persistence.Entity;
import org.springframework.roo.addon.javabean.RooJavaBean;
import org.springframework.roo.addon.tostring.RooToString;
import org.springframework.roo.addon.entity.RooEntity;
import javax.persistence.Table;
import de.oponion.domain.security.AclClass;
import javax.validation.constraints.NotNull;
import javax.persistence.ManyToOne;
import javax.persistence.JoinColumn;
import javax.persistence.UniqueConstraint;
import de.oponion.domain.security.AclSid;
@Entity
@RooJavaBean
@RooToString
@RooEntity(versionField = "")
@Table(name = "acl_object_identity", uniqueConstraints = { @UniqueConstraint(columnNames = {
"object_id_class", "object_id_identity" }) })
public class AclObjectIdentity {
@NotNull
@ManyToOne(targetEntity = AclClass.class)
@JoinColumn
private AclClass object_id_class;
@NotNull
private Long object_id_identity;
@ManyToOne(targetEntity = de.oponion.domain.security.AclObjectIdentity.class)
@JoinColumn
private de.oponion.domain.security.AclObjectIdentity parent_object;
@NotNull
@ManyToOne(targetEntity = AclSid.class)
@JoinColumn
private AclSid owner_sid;
@NotNull
private boolean entries_inheriting;
}
AclSid.java
Code:
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
import javax.validation.constraints.NotNull;
import org.springframework.roo.addon.entity.RooEntity;
import org.springframework.roo.addon.javabean.RooJavaBean;
import org.springframework.roo.addon.tostring.RooToString;
@Entity
@RooJavaBean
@RooToString
@RooEntity(versionField = "")
@Table(name = "acl_sid", uniqueConstraints = { @UniqueConstraint(columnNames = {
"sid", "principal" }) })
public class AclSid {
@NotNull
private boolean principal;
@NotNull
private String sid;
}