Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java KeyClope-自定义SPI未出现在列表中_Java_Spring Boot_Wildfly_Keycloak_Spi - Fatal编程技术网

Java KeyClope-自定义SPI未出现在列表中

Java KeyClope-自定义SPI未出现在列表中,java,spring-boot,wildfly,keycloak,spi,Java,Spring Boot,Wildfly,Keycloak,Spi,我为我的KeyClope服务器定制了一个SPI,现在我必须在管理控制台上配置它 我将SPI添加为一个模块,并进行手动安装,因此我将其放在modules/{package name}/main上,并带有module.xml;我还将安装在standalone.xml上,也将安装在keydepot服务器子系统中 完成所有这些配置后,我会转到管理控制台来配置自定义用户提供程序,但它不会出现在列表中 我能做什么?考虑将您的SPI实现部署为JAR或EAR。当我想将它们作为JBoss模块部署到Key斗篷时,我

我为我的KeyClope服务器定制了一个SPI,现在我必须在管理控制台上配置它

我将SPI添加为一个模块,并进行手动安装,因此我将其放在modules/{package name}/main上,并带有module.xml;我还将安装在standalone.xml上,也将安装在keydepot服务器子系统中

完成所有这些配置后,我会转到管理控制台来配置自定义用户提供程序,但它不会出现在列表中


我能做什么?

考虑将您的SPI实现部署为JAR或EAR。当我想将它们作为JBoss模块部署到Key斗篷时,我也遇到了一些麻烦,但我不记得具体是什么(在我的公司,我们使用自定义SPI实现对Key斗篷进行了大量定制,包括身份验证程序、UserStorageProvider、REST端点、OIDC映射器……)。现在我们将它们部署为EAR包。以下是如何使用maven执行耳朵打包:

<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>
现在您可以使用maven-wildfly插件进行mvn-wildfly:deploy,或者通过JBoss-cli或部署扫描程序手动部署ear(查看wildfly工件部署文档)。您应该在Wildfly日志中看到关于扩展部署的相应消息(将有ProviderFactory id)


关于使用模块时SPI实现的不可用性,我想这是因为JBoss模块加载太早,所以Keyclope deployer子系统没有看到它们。

我的最终解决方案是应用


并将EntityManager的用户存储库更改为与数据库连接。

找到了一种方法,就是在
类路径:${jboss.home.dir}/providers/
中添加文件,因为在其中找到的模块中的SPI由Keyclope解释


有关的详细信息。

好的,现在它可以与热部署一起使用,但它仍然没有出现在列表中。我也要换衣服吗?因为现在我有了“master”,您可以在ServerInfo->Providers(服务器范围的信息)中搜索SPI实现的提供者id。如果你找到了,一切都好。您实现了哪种类型的SPI?最后,我将UserRepository中的示例应用于EntityManger,它可以工作。哦,是的,EntityManager,最后请记住为什么将SPI实现部署为静态JBoss模块对我不起作用。据我所知,Wildfly只有用于动态部署(EAR、WAR、JAR)的EJB钩子,但静态模块启动得太早,所以不会将EntityManager注入SPI bean。
<?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>