Keycloak - 事件侦听器提供者未触发新领域创建事件
Keycloak - Event Listener provider not firing new realm creation event
我已经实现了自定义事件侦听器提供程序。
除了领域创建事件(新领域创建)之外,我能够接收所有事件。我也想在领域创建期间获得事件。
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 支持吗?如果没有,还有其他实现此目标的可能性吗?
我使用的是 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();