spring 未部署Keycloak自定义事件侦听器

s3fp2yjn  于 2023-03-16  发布在  Spring
关注(0)|答案(1)|浏览(132)

我试图创建一个自定义事件侦听器,遇到了一个问题,当我运行带有keycloak的容器时,没有任何关于部署项目的.jar文件的日志信息。
在使用keycloak运行容器之前,我的操作顺序是:
mvn清洁包-〉构建-t自定义-keycloak。-〉docker-composite up
除了下面的实现之外,我还有一个文件 org. keyclock.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";
    }
}

停靠文件

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

坞站组合

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
7uhlpewt

7uhlpewt1#

我遇到了同样的问题,不幸的是,configuring providers上的文档非常少,没有提到重要的注意事项,即src/resources/META-INF文件夹必须包含SimpleEventListenerProviderFactory的文本文件。
解决方案是创建文件夹src/resources/META-INF/并放置一个纯文本文件,如下所示。
org.keycloak.events.EventListenerProviderFactory

your.package.name.SimpleEventListenerProviderFactory

不要忘记在运行kc.sh start之前使用kc.sh build再次构建配置
这花了我几个小时才弄明白。但现在它终于显示在keycloak管理页面上了。由于缺乏更好的示例,我只能提供my implementation。还要注意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>

相关问题