Key斗篷自定义事件侦听器未部署



我正在尝试创建一个自定义事件侦听器,但遇到了一个问题,即当我使用keycapture运行容器时,没有任何关于部署项目的.jar文件的日志记录信息。

在使用keyclock运行容器之前我的操作序列:

mvn清洁包装->build-t自定义密钥斗篷->码头工人组成

除了下面的实现之外,我还有一个文件org.keycapture.events.EventListenerProviderFactory,其中包含我的事件侦听器提供程序工厂实现的目录-SimpleEventListenerProvider

事件侦听器提供程序实现

@Component
public class SimpleEventListenerProvider implements EventListenerProvider {
@Override
public void onEvent(Event event) {
}
@Override
public void onEvent(AdminEvent adminEvent, boolean b) {
}
@Override
public void close() {
}
}

事件侦听器提供程序工厂实现

@Component
@RequiredArgsConstructor
public class SimpleEventListenerProviderFactory implements EventListenerProviderFactory {
private final SimpleEventListenerProvider provider;
@Override
public EventListenerProvider create(KeycloakSession keycloakSession) {
return provider;
}
@Override
public void init(Config.Scope scope) {
}
@Override
public void postInit(KeycloakSessionFactory keycloakSessionFactory) {
}
@Override
public void close() {
}
@Override
public String getId() {
return "session-restrictor";
}
}

Dockerfile

FROM quay.io/keycloak/keycloak:19.0.0
ARG APPLICATION_JAR=target/*.jar
COPY ${APPLICATION_JAR} /opt/keycloak/providers
RUN /opt/keycloak/bin/kc.sh build  show-config --metrics-enabled=true

Docker撰写

version: "3.8"
services:
postgres:
container_name: postgres
image: postgres:latest
ports:
- '5432:5432'
volumes:
- /home/lib/v1:/var/lib/v1
environment:
POSTGRES_USERNAME: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: data
keycloak:
container_name: keycloak
image: custom-keycloak:latest
volumes:
- /home/lib/keycloak/v1:/var/lib/keycloak/v1
environment:
KEYCLOAK_ADMIN: admin
KEYCLOAK_ADMIN_PASSWORD: admin
KEYCLOAK_MANAGEMENT_PASSWORD: admin
KEYCLOAK_DATABASE_PORT: 5432
KEYCLOAK_DATABASE_HOST: postgres
KEYCLOAK_DATABASE_NAME: data
KEYCLOAK_CREATE_ADMIN_USER: 'true'
KEYCLOAK_DATABASE_USER: postgres
KEYCLOAK_DATABASE_PASSWORD: postgres
entrypoint: ["/opt/keycloak/bin/kc.sh", "start-dev", "--features=preview"]
depends_on:
postgres:
condition: service_started
ports:
- '8080:8080'
restart: unless-stopped

我遇到了同样的问题,不幸的是,关于配置提供程序的文档非常稀疏,并且没有提到重要的注意,src/resources/META-INF文件夹必须包含一个包含SimpleEventListenerProviderFactory的文本文件。

解决方案是创建文件夹src/resources/META-INF/,并按如下方式放置一个纯文本文件。

org.keycloak.events.EventListenerProviderFactory:

your.package.name.SimpleEventListenerProviderFactory

在运行kc.sh start之前,不要忘记使用kc.sh build再次构建配置

我花了几个小时才弄明白。但现在它终于显示在密钥斗篷管理页面上了。由于缺乏更好的例子,我只能提供我的实现。还要注意xml文件:

jboss-deployment-structure.xml:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="org.keycloak.keycloak-services" />
</dependencies>
</deployment>
</jboss-deployment-structure>

最新更新