我正在尝试创建一个自定义事件侦听器,但遇到了一个问题,即当我使用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>