【问题标题】:Keycloak extension with dependencies具有依赖项的 Keycloak 扩展
【发布时间】:2018-02-22 15:12:10
【问题描述】:

我正在创建一个带有依赖项的 Keycloak 扩展。我在pom.xml 上添加了这样的条目:

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20160810</version>
</dependency>

然后我将它部署到 Keycloak:

mvn clean install wildfly:deploy

但是当我运行它时,我得到了错误:

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

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

【问题讨论】:

    标签: java maven dependencies wildfly keycloak


    【解决方案1】:

    你必须create your SPI dependencies as jboss modules

    步骤:

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

      <jboss-deployment-structure>
      <deployment>
          <dependencies>
              <module name="org.json.json" />
          </dependencies>
      </deployment>
      </jboss-deployment-structure>
      
    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>
      
    5. 编译您的 SPI

    6. 重启keycloak
    7. 重新部署您的 SPI

    【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-02-10
      • 1970-01-01
      • 1970-01-01
      • 2012-09-22
      • 1970-01-01
      • 2020-04-26
      • 1970-01-01
      • 1970-01-01
      • 2017-07-01
      相关资源
      最近更新 更多