gpt4 book ai didi

jboss - 带有外部 Jar 的 Keycloak 自定义 SPI 部署

转载 作者:行者123 更新时间:2023-12-03 17:32:36 25 4
gpt4 key购买 nike

我有一个 SPI 实现,它是:

  • 自定义SPI,直接通过SPI接口(interface)实现
  • 有一个 JBoss 库中不存在的外部 jar

  • 1) EAR 部署:我尝试了 EAR 部署并将我的 .ear 部署到/standalone/deployments。这解决了捆绑在 EAR 的 lib 文件夹中的外部 jar 问题。但是现在 SPI 没有初始化(我在调试时看到了),并且当我触发 SPI 时出现异常:
    11:34:02,185 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: Keycloak 9.0.2 (WildFly Core 10.0.3.Final) started in 12070ms - Started 732 of 1031 services (613 services are lazy, passive or on-demand)
    11:34:18,209 ERROR [org.keycloak.services.error.KeycloakErrorHandler] (default task-1) Uncaught server error: java.lang.NullPointerException
    at org.keycloak.keycloak-services@9.0.2//org.keycloak.services.DefaultKeycloakSessionFactory.getAllProviderIds(DefaultKeycloakSessionFactory.java:362)

    然后我想也许keycloak无法通过独立/部署部署导入扩展SPI,这也提到了 here如果您开发自定义 SPI keycloak 建议(或需要?)模块部署。

    2)然后我尝试了模块部署;现在我可以看到我的自定义 SPI 正在初始化,但现在 keycloak 找不到我的外部 JAR。
    13:17:05,682 FATAL [org.keycloak.services] (ServerService Thread Pool -- 65) java.lang.RuntimeException: org.jboss.modules.ModuleNotFoundException: com.orbitz.consul

    作为解决方案,我找到了可以将我的依赖 jar 及其所有依赖 jar 放到 的地方。 ${KEYCLOAK_HOME}\modules\system\layers\keycloak 但我不想手动将我的外部 JAR 及其所有依赖项安装到 keycloak 的基础上(可能以某种方式自动安装?)。有什么解决办法吗?

    部署为模块的脚本:
    ./jboss-cli.bat --command="module add --name=de.easy.one.bouncer.spi.registry --resources=target/registry-spi-1.0.1-SNAPSHOT.jar --dependencies=org.keycloak.keycloak-core,org.keycloak.keycloak-services,org.keycloak.keycloak-server-spi,org.keycloak.keycloak-server-spi-private,javax.api,javax.ws.rs.api,com.fasterxml.jackson.core.jackson-core,com.fasterxml.jackson.core.jackson-databind,com.fasterxml.jackson.core.jackson-annotations,org.jboss.logging,com.orbitz.consul"

    并将其添加到standalone.xml,如下所示:
    <provider>module:de.easy.one.bouncer.spi.registry</provider>

    META-INF/服务

    文件名 --> 文件内容

    org.keycloak.provider.Spi --> de.easy.one.bouncer.spi.registry.spi.RegistryProviderSpi
    de.easy.one.bouncer.spi.registry.spi.RegistryProviderFactory --> de.easy.one.bouncer.spi.registry.consul.ConsulRegistryProviderFactory
    我的 pom.xml
    <dependencies>
    <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <scope>provided</scope>
    <optional>true</optional>
    </dependency>

    <dependency>
    <groupId>org.keycloak</groupId>
    <artifactId>keycloak-server-spi</artifactId>
    <scope>provided</scope>
    </dependency>

    <dependency>
    <groupId>org.keycloak</groupId>
    <artifactId>keycloak-server-spi-private</artifactId>
    <scope>provided</scope>
    </dependency>

    <dependency>
    <groupId>org.keycloak</groupId>
    <artifactId>keycloak-services</artifactId>
    <scope>provided</scope>
    </dependency>

    <!-- this is not provided and I want to use as external jar -->
    <dependency>
    <groupId>com.orbitz.consul</groupId>
    <artifactId>consul-client</artifactId>
    <version>1.4.2</version>
    </dependency>
    </dependencies>

    最佳答案

    尝试创建一个 UBER JAR 包,其中包含所有未提供的依赖项
    pom.xml:

        <properties>
    <uber-jar.name>${project.artifactId}</uber-jar.name>
    <shade.plugin.version>3.2.1</shade.plugin.version>
    </properties>
    <build>
    <plugins>
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>${shade.plugin.version}</version>
    <executions>
    <execution>
    <phase>package</phase>
    <goals>
    <goal>shade</goal>
    </goals>
    <configuration>
    <finalName>${uber-jar.name}</finalName>
    <filters>
    <filter>
    <artifact>*:*</artifact>

    <!-- Anti-`Invalid signature file digest` -->
    <excludes>
    <exclude>META-INF/*.SF</exclude>
    <exclude>META-INF/*.DSA</exclude>
    <exclude>META-INF/*.RSA</exclude>
    </excludes>
    </filter>
    </filters>
    </configuration>
    </execution>
    </executions>
    </plugin>
    </plugins>
    </build>

    关于jboss - 带有外部 Jar 的 Keycloak 自定义 SPI 部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61185744/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com