Прослушивание изменений в пользователях и группах sling

Я хочу получать уведомления об изменениях пользователей или групп в userManager sling по мере их возникновения. Например, когда создается новая группа, мне нужно создать новый узел с тем же именем в /content. Когда создается новый пользователь, я хочу дать ему права на запись для /content/foo. И аналогичные шаги tearDown при удалении объектов.

Я попытался зарегистрировать EventHandler (org.osgi.service.event.EventHandler) с параметром event.topics, установленным на «*» (все темы), но это зафиксировало только изменения ресурсов, а не изменения userManager, поскольку пользователи и группы являются синтетическими ресурсами (я считать)

Я пытался использовать org.apache.sling.api.request.SlingRequestListener, но SlingRequestEvent не содержал никакой информации, которая помогла бы мне отличить запрос (или я не знал, как это сделать). Кроме того, я не уверен, что это можно использовать даже для обратных вызовов, которые необходимо вызывать ПОСЛЕ обработки запроса.

Я использовал фильтры для другая проблема, и я пытался применить их и для этой цели. Но у них есть свои ограничения. Мой фильтр вызывается ДО запроса, поэтому невозможно узнать, приведет ли запрос к УСПЕХУ, прежде чем принять решение о принятии мер.

Любые предложения о том, как слушать и реагировать на изменения в моделях пользователей и групп sling?


person Subhash Gopalakrishnan    schedule 11.07.2012    source источник
comment
Мы обсуждали это на уроке, который я посетил несколько месяцев назад. Я не понимаю это достаточно хорошо, чтобы привести рабочий пример. Но я могу предложить ObservationManager, Event и EventListener в javax.jcr.observation.   -  person David Gorsline    schedule 11.07.2012
comment
Спасибо, я попробую это. Но я подозреваю, что это может не работать с пользователями и группами, потому что они не являются настоящими узлами JCR.   -  person Subhash Gopalakrishnan    schedule 11.07.2012


Ответы (1)


В https://issues.apache.org/jira/browse/SLING-977 Ян Бостон предлагает использовать службу SlingPostProcessor для получения информации о вызовах сервлетов POST управления пользователями.

Я не пробовал это сам, и если вы это сделаете, вы все равно можете пропустить изменения, которые выполняются через API-интерфейсы управления пользователями Sling, но этого может быть достаточно в зависимости от вашего варианта использования.

Кроме того, я не думаю, что в настоящее время существует верный способ получать уведомления о таких изменениях. Чтобы реализовать это в Sling, нам нужно обернуть объекты org.apache.jackrabbit.api.security.user.* (Group, User, UserManager) для отправки событий при их изменении. Конечно, выполнимо, но потребуются изменения в этом пакете Sling.

person Bertrand Delacretaz    schedule 13.07.2012
comment
Спасибо за подсказку. Я попытался добавить постпроцессор и постоперацию, как описано в примерах, но они вызываются только для POST, идущего к /content, а не для POST, идущего для создания пользователей и групп. Когда я просмотрел код, оказалось, что SlingPostServlet действительно включает постпроцессоры, но CreateUserServlet, похоже, не использует постпроцессоры. Есть ли шанс, что недавний рефакторинг убрал упомянутый вами обходной путь? - person Subhash Gopalakrishnan; 18.07.2012