亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Keycloak - 自定義 SPI 未出現在列表中

Keycloak - 自定義 SPI 未出現在列表中

哈士奇WWW 2023-09-20 17:10:53
我為我的 keycloak 服務器制作了一個自定義 SPI,現在我必須在管理控制臺上配置它。我將 SPI 添加為模塊,并手動安裝,因此我將其放在 module/{package-name}/main 中,并包含 module.xml;我還將其放在standalone.xml 中,并將其放在keycloak-server 子系統中。完成所有這些配置后,我轉到管理控制臺來配置自定義用戶提供程序,但它沒有出現在列表中。我能做些什么?
查看完整描述

3 回答

?
慕碼人8056858

TA貢獻1803條經驗 獲得超6個贊

找到了一種方法,就是在里面添加文件classpath:${jboss.home.dir}/providers/,因為那里找到的SPI內部模塊是由Keycloak解釋的。


查看完整回答
反對 回復 2023-09-20
?
藍山帝景

TA貢獻1843條經驗 獲得超7個贊

我的最終解決方案是應用來自的示例

https://github.com/thomasdarimont/keycloak-user-storage-provider-demo

并更改 EntityManager 的 UserRepository 以連接數據庫。


查看完整回答
反對 回復 2023-09-20
?
慕的地8271018

TA貢獻1796條經驗 獲得超4個贊

考慮將 SPI 實現部署為 JAR 或 EAR。當我想將它們部署到 keycloak 作為 JBoss 模塊時,我也遇到了一些麻煩,但我不記得具體是什么(在我的公司,我們使用自定義 SPI 實現大量定制了 Keycloak,包括 Authenticators、UserStorageProvider、REST 端點、OIDC 映射器。 ..)?,F在我們將它們部署為 EAR 包。以下是使用 Maven 執行 EAR 打包的方法:


<name>Keycloak Extensions EAR</name>


<artifactId>cardpay-extensions</artifactId>

<packaging>ear</packaging>


<properties>

    ...

</properties>


<dependencies>


    <!-- Your jars with provider implementations, I'm use two jars (for unit testing simplicity) -->


    <dependency>

        <groupId>com.acme</groupId>

        <artifactId>extensions-core</artifactId>

        <version>${project.version}</version>

        <type>jar</type>

    </dependency>


    <dependency>

        <groupId>com.acme</groupId>

        <artifactId>extensions-providers</artifactId>

        <version>${project.version}</version>

        <type>ejb</type>

    </dependency>


</dependencies>


<build>

    <finalName>${project.artifactId}</finalName>

    <plugins>


        <plugin>

            <groupId>org.apache.maven.plugins</groupId>

            <artifactId>maven-ear-plugin</artifactId>

            <version>3.0.1</version>

            <configuration>

                <version>8</version>

                <defaultLibBundleDir>lib</defaultLibBundleDir>

                <outputFileNameMapping>@{artifactId}@.@{extension}@</outputFileNameMapping>

            </configuration>

        </plugin>


    </plugins>

</build>

不要忘記添加main/application/META-INF/jboss-deployment-structure.xml如下內容:


<?xml version="1.0" ?>

<jboss-deployment-structure>


<!-- Core module -->

<module name="deployment.extensions.core">

    <resources>

        <resource-root path="lib/core.jar"/>

    </resources>

    <dependencies>

        <module name="com.oracle.ojdbc" export="true"/>

        <module name="org.jboss.logging" export="true"/>

        <module name="org.apache.commons.io" export="true"/>

        <module name="javax.ws.rs.api" export="true"/>

        <module name="org.keycloak.keycloak-common" export="true"/>

        <module name="org.keycloak.keycloak-core" export="true"/>

        <module name="org.keycloak.keycloak-server-spi" export="true"/>

        <module name="org.keycloak.keycloak-server-spi-private" export="true"/>

        <module name="org.keycloak.keycloak-services" export="true"/>

    </dependencies>

</module>


<!-- Define dependency on core module for all sub-deployments -->

<deployment>

    <dependencies>

        <module name="deployment.extensions.core" export="true"/>

    </dependencies>

</deployment>


<!-- Providers bundle -->

<sub-deployment name="providers.jar">

    <dependencies>

        <module name="javax.api"/>

    </dependencies>

</sub-deployment>


</jboss-deployment-structure>

現在,您可以使用 maven-wildfly-plugin 進行 mvn wildfly:deploy 或通過 JBoss cli 或部署掃描器手動部署 Ear(查看 Wildfly 工件部署文檔)。您應該在 Wildfly 日志中看到有關擴展部署的相應消息(會有 ProviderFactory id)


關于使用模塊時 SPI 實現不可用,我猜這是因為 JBoss 模塊加載得太早,所以 Keycloak 部署程序子系統看不到它們。


查看完整回答
反對 回復 2023-09-20
  • 3 回答
  • 0 關注
  • 156 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號