Это довольно сложно. Я пересмотрел исходный код Spring, чтобы понять принцип, и это заняло у меня много времени. Я не могу точно сказать вам, как я это реализовал (потому что это очень специфично для проекта, над которым я работаю), но постараюсь дать вам отправную точку.
То, что я сделал, было:
- Реализация пользовательских
org.springframework.security.acls.sid.Sid
. Это Sid
ссылается не на authority
или user
, а на какой-то групповой объект, который имеет идентификатор и ссылается на два разных объекта. Чтобы использовать этот групповой объект как Sid
, вы должны создать ACL_Sid
-запись с id
объекта как ACL_sid.sid
. ACL_sid.principal
должно быть целым числом, отличным от 0 или 1, которое необходимо проверить в тесте в пользовательском LookupStrategy
(см. Ниже и исходный код Spring).
- Расширьте
org.springframework.security.acls.sid.SidRetrievalStrategyImpl
, чтобы получить пользовательские Sid
из базы данных.
- Реализация пользовательских
org.springframework.security.acls.jdbc.LookupStrategy
. Я скопировал существующую реализацию (потому что класс был финальным) и изменил ее для своих нужд.
- Все соединено в конфигурации Spring, потому что для конфигурации Spring ACL по умолчанию не требуется, какие классы она должна использовать (а не значения по умолчанию)
Посмотрите на исходный код Spring и посмотрите, как это делается.