1

我希望在 sling 的 userManager 中的用户或组发生更改时收到通知。比如新建组时,我需要在/content下新建一个同名节点。创建新用户时,我想给他们/content/foo 的写权限。以及删除对象时的类似拆卸步骤。

我尝试注册一个 EventHandler(org.osgi.service.event.EventHandler),将 event.topics 设置为“*”(所有主题),但这仅捕获资源更改而不是 userManager 更改,因为用户和组是合成资源(我思考)

我尝试使用 org.apache.sling.api.request.SlingRequestListener,但 SlingRequestEvent 没有提供任何可以帮助我区分请求的信息(或者我不知道如何区分)。另外,我不确定这是否甚至可以用于处理请求后需要调用的回调。

我已经将过滤器用于不同的问题,并且我也尝试将它们应用于此目的。但它们有其局限性——我的过滤器在请求之前被调用,所以在决定采取行动之前不可能知道请求是否会导致成功。

关于如何倾听和响应 sling 的用户和组模型变化的任何建议?

4

1 回答 1

1

https://issues.apache.org/jira/browse/SLING-977中,Ian Boston 建议使用 SlingPostProcessor 服务来获悉对用户管理的 POST servlet 的调用。

我自己没有尝试过,如果你这样做,你可能会错过通过 Sling 的用户管理 API 完成的更改——但这可能已经足够好,具体取决于你的用例。

除此之外,我认为目前没有一种万无一失的方式来通知此类更改。为了在 Sling 中实现这一点,我们需要包装 org.apache.jackrabbit.api.security.user.* 对象(Group、User、UserManager)以在它们发生更改时发送事件。当然可行,但需要更改该 Sling 捆绑包。

于 2012-07-13T12:36:25.067 回答