具有依赖项的Keycloak扩展

rig*_*gon 5 java dependencies maven wildfly keycloak

我正在创建具有依赖项的Keycloak扩展。我pom.xml像这样添加条目:

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20160810</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

然后我将其部署到Keycloak:

mvn clean install wildfly:deploy
Run Code Online (Sandbox Code Playgroud)

但是当我运行它时,出现了错误:

org.jboss.resteasy.spi.UnhandledException: java.lang.NoClassDefFoundError: org/json/JSONObject
Caused by: java.lang.NoClassDefFoundError: org/json/JSONObject
Caused by: java.lang.ClassNotFoundException: org.json.JSONObject from [Module "deployment.keycloak-authenticator.jar" from Service Module Loader]
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:198)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:412)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:400)
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:116)
    ... 66 more
Run Code Online (Sandbox Code Playgroud)

如何在Keycloak中向扩展添加依赖项?

小智 9

您必须将SPI 依赖项创建为 jboss 模块

脚步:

  1. 在 src/main/resources/META-INF 目录或您的 SPI 中添加一个 jboss-deployment-structure.xml 文件,如下所示(官方文档):

    <jboss-deployment-structure>
    <deployment>
        <dependencies>
            <module name="org.json.json" />
        </dependencies>
    </deployment>
    </jboss-deployment-structure>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 制作 $KEYCLOAK_HOME/modules/system/layers/base/org/json/json/main 目录

  3. 在创建的目录中添加 json-20160810-javadoc.jar
  4. 在同一个目录中添加一个 module.xml 文件,内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <module xmlns="urn:jboss:module:1.5" name="org.json.json">
        <properties>
            <property name="jboss.api" value="private"/>
        </properties>
    
        <resources>
            <resource-root path="json-20160810-javadoc.jar"/>
        </resources>
    
        <dependencies>
        </dependencies>
    </module>
    
    Run Code Online (Sandbox Code Playgroud)
  5. 编译你的SPI

  6. 重新启动密钥斗篷
  7. 重新部署您的 SPI


rig*_*gon 5

有更好的方法,部署为 EAR 存档。这个项目展示了如何:https : //github.com/stianst/keycloak-experimental/tree/master/fido-u2f