在 Keycloak 中使用第三方库

Use third party libraries in Keycloak

我想为我的 keycloak 模块使用 kafka-clients,以便将每个登录事件发布到其中。

问题出在部署过程中:我将 "module way" 用于打包在 jar 中的自定义 keycloak 提供程序,将 kafka-clients 声明为模块依赖项。由于它不存在,我还手动创建了一个 kafka-clients 模块。不过,由于未找到 class,我在启动时遇到问题:

java.lang.ClassNotFoundException: javax.net.ssl.KeyManagerFactory from [Module "org.apache.kafka.kafka-clients"

可能缺少其他依赖项。无论如何,我不想手动处理所有依赖问题。

所以我的问题是:部署自定义密钥斗篷 SPI 提供程序的最佳方法是什么,需要第三方依赖项?

我应该构建一个 EAR 吗?一个 WAR ?一个 JAR 就够了吗?

如果你添加 kafka-clients 依赖,一个 JAR 就足够了。

您可以查看 keycloak-metrics-spi 如何将 prometeus 依赖项捆绑在自己的 jar 中(使用 gradle)

configurations {
    bundleLib
}

dependencies {
    bundleLib group: 'io.prometheus', name: 'simpleclient_common', version: prometheusVersion
    bundleLib group: 'io.prometheus', name: 'simpleclient_hotspot', version: prometheusVersion
    configurations.compile.extendsFrom(configurations.bundleLib)
}

jar {
    from {
        configurations.bundleLib.collect { it.isDirectory() ? it : zipTree(it) }
    }
}

EAR 也可以(并且允许您进行热部署),您只需将 kafka-clients 添加到存档的 lib 目录中。