gpt4 book ai didi

Keycloak - 事件监听器提供者未触发新领域创建事件

转载 作者:行者123 更新时间:2023-12-05 03:02:27 24 4
gpt4 key购买 nike

我已经实现了自定义事件监听器提供程序。

我能够接收除领域创建事件(新领域创建)之外的所有事件。我也想在领域创建期间获得该事件。

Keycloak 支持吗?如果没有,还有其他实现这一目标的可能性吗?

我使用的是 Keycloak 4.5.0 版。

提前致谢。

最佳答案

在对 keycloak 代码做了一些研究之后,我得出结论,keycloak 默认情况下不提供该事件。

所以我修改了以下来自 keycloak 的文件,这将有助于捕获 Realm 创建和删除事件。

变化 1(最重要):

文件:

keycloak/services/src/main/java/org/keycloak/services/managers/RealmManager.java

功能:

protected void setupRealmDefaults

在上面的函数中,您应该在领域创建期间将事件监听器添加到领域。

Set<String> eventListenerSet = new HashSet<>();
eventListenerSet.add("jboss-logging"); //This listener will be there by default
eventListenerSet.add("EVENT_LISTENER_YOU_WANT_TO_RECEIVE_EVENT");
realm.setEventsListeners(eventListenerSet);

变化 2:

文件:

keycloak/services/src/main/java/org/keycloak/services/resources/admin/RealmsAdminResource.java

功能:

public Response importRealm

在上面的函数中,在返回响应之前添加下面几行

Line 1: Create object for admin event
Line 2: Prepare event to trigger with appropriate event type and representation, in this case Create
AdminEventBuilder adminEvent = new AdminEventBuilder(realm, auth, session, clientConnection);

adminEvent.operation(OperationType.CREATE).resource(ResourceType.REALM).representation(StripSecretsUtils.strip(rep)).success();

更改 3(仅在需要删除事件时才需要)

文件:

keycloak/services/src/main/java/org/keycloak/services/resources/admin/RealmAdminResource.java

功能:

public void deleteRealm

在第一行之后添加以下代码

AdminAuth adminAuth = auth.adminAuth();
RealmRepresentation realmRepresentation = new RealmRepresentation();
realmRepresentation.setRealm(realm.getName());
AdminEventBuilder adminEvent = new AdminEventBuilder(realm, adminAuth, session, connection);
adminEvent.operation(OperationType.DELETE).resource(ResourceType.REALM).representation(realmRepresentation).success();

关于Keycloak - 事件监听器提供者未触发新领域创建事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54766636/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com