Spring Security обеспечивает обработку ACL с четырьмя предопределенными классами.
В этом контексте представляют интерес два класса.
Класс AclClass
@Entity
@Table(name = "acl_class")
public class AclClass implements Serializable {
@Id
@Column(name="id")
public Long id;
@Column(name = "class")
public String className; //class path, e.g., com.myproject.cat
}
Класс AclObjectIdentity
@Entity
@Table(name = "acl_object_identity")
public class AclObjectIdentity implements Serializable {
@Id
@Column(name="id")
public Long id;
@JoinColumn(name = "object_id_class", referencedColumnName = "id")
@ManyToOne
public AclClass objectIdClass;
@Column(name = "object_id_identity")
public Long objectIdIdentity;
}
AclClass
определяет класс Java, который обрабатывается списками ACL, а AclObjectIdentity
представляет точные объекты.Для сопоставления нужен идентификатор AclClass
, а также первичный ключ этого объекта. Примечание: Поскольку AclObjectIdentity
может ссылаться на несколько классов, сохраняется только Id
, и отображение объекта Hibernate не может быть применено.
Теперь у меня есть класс cat, и мне нужна какая-то структура, напримерсопоставление OneToOne:
@Entity
@Table(name = "cat")
public class cat implements Serializable {
@Id
@Column(name="id")
public Long id;
@OneToOne // where class = cat and objectIdClass = id
public AclObjectIdentity object;
...
}
Как я могу добиться этого без изменения структуры ACL Spring?