NoClassDefFoundError: org/keycloak/KeycloakPrincipal
NoClassDefFoundError: org/keycloak/KeycloakPrincipal
我在 WildFly 10 中部署 ear 时出现以下异常。已安装 Apapter,因此 ear 中没有包含任何 jars,也没有设置依赖项。
Caused by: java.lang.NoClassDefFoundError:
org/keycloak/KeycloakPrincipal
Caused by: java.lang.ClassNotFoundException: org.keycloak.KeycloakPrincipal from [Module
\"deployment.app.ear.appEJB.jar:main\" from Service Module Loader]"},
"WFLYCTL0412: Required services that are not installed:" => [
"jboss.undertow.deployment.default-server.default-host./App"
]
此问题仅针对 appEJB.jar 中的 类。 appWEB.war 中的 类 没有依赖性问题。
这是我的子系统配置文件:
<subsystem xmlns="urn:jboss:domain:keycloak:1.1">
<secure-deployment name="appWEB.war">
<realm>demo</realm>
<resource>app</resource>
<use-resource-role-mappings>true</use-resource-role-mappings>
<public-client>true</public-client>
<auth-server-url>http://localhost:8180/auth</auth-server-url>
<ssl-required>EXTERNAL</ssl-required>
<principal-attribute>preferred_username</principal-attribute>
</secure-deployment>
</subsystem>
是否有任何其他方法可以在子系统中配置 ear 部署,以便 ejb.jar 也隐式获取 Keycloak 库?
当我在 jboss 部署描述符中为 ejb.jar 设置 Keycloak 模块依赖时,问题已修复。
<module name="org.keycloak.keycloak-adapter-spi"/>
<module name="org.keycloak.keycloak-adapter-core"/>
<module name="org.keycloak.keycloak-common"/>
<module name="org.keycloak.keycloak-core"/>
在 ejb.jar
项目的 META-INF 路径中创建 MANIFEST.MF
。在文件内容中写入:
Manifest-Version: 1.0
Dependencies: org.keycloak.keycloak-adapter-spi, org.keycloak.keycloak-adapter-core, org.keycloak.keycloak-common, org.keycloak.keycloak-core
我在为 16.1.0 开发 Authenticator
时遇到了相同的错误类型,具体错误是:
Caused by: java.lang.ClassNotFoundException: org.keycloak.services.util.CookieHelper from [Module "deployment.my-authenticator-1.0-SNAPSHOT.jar" from Service Module Loader]
解决方案是@valsaraj-viswanathan 。但是,我想详细说明如何设置它。
在myAuthenticator/src/main/resources/META-INF/jboss-deployment-structure.xml
我添加了以下内容:
<jboss-deployment-structure>
<deployment>
<dependencies>
<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>
</deployment>
</jboss-deployment-structure>
我在 WildFly 10 中部署 ear 时出现以下异常。已安装 Apapter,因此 ear 中没有包含任何 jars,也没有设置依赖项。
Caused by: java.lang.NoClassDefFoundError: org/keycloak/KeycloakPrincipal Caused by: java.lang.ClassNotFoundException: org.keycloak.KeycloakPrincipal from [Module \"deployment.app.ear.appEJB.jar:main\" from Service Module Loader]"}, "WFLYCTL0412: Required services that are not installed:" => [ "jboss.undertow.deployment.default-server.default-host./App" ]
此问题仅针对 appEJB.jar 中的 类。 appWEB.war 中的 类 没有依赖性问题。 这是我的子系统配置文件:
<subsystem xmlns="urn:jboss:domain:keycloak:1.1">
<secure-deployment name="appWEB.war">
<realm>demo</realm>
<resource>app</resource>
<use-resource-role-mappings>true</use-resource-role-mappings>
<public-client>true</public-client>
<auth-server-url>http://localhost:8180/auth</auth-server-url>
<ssl-required>EXTERNAL</ssl-required>
<principal-attribute>preferred_username</principal-attribute>
</secure-deployment>
</subsystem>
是否有任何其他方法可以在子系统中配置 ear 部署,以便 ejb.jar 也隐式获取 Keycloak 库?
当我在 jboss 部署描述符中为 ejb.jar 设置 Keycloak 模块依赖时,问题已修复。
<module name="org.keycloak.keycloak-adapter-spi"/>
<module name="org.keycloak.keycloak-adapter-core"/>
<module name="org.keycloak.keycloak-common"/>
<module name="org.keycloak.keycloak-core"/>
在 ejb.jar
项目的 META-INF 路径中创建 MANIFEST.MF
。在文件内容中写入:
Manifest-Version: 1.0
Dependencies: org.keycloak.keycloak-adapter-spi, org.keycloak.keycloak-adapter-core, org.keycloak.keycloak-common, org.keycloak.keycloak-core
我在为 16.1.0 开发 Authenticator
时遇到了相同的错误类型,具体错误是:
Caused by: java.lang.ClassNotFoundException: org.keycloak.services.util.CookieHelper from [Module "deployment.my-authenticator-1.0-SNAPSHOT.jar" from Service Module Loader]
解决方案是@valsaraj-viswanathan
在myAuthenticator/src/main/resources/META-INF/jboss-deployment-structure.xml
我添加了以下内容:
<jboss-deployment-structure>
<deployment>
<dependencies>
<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>
</deployment>
</jboss-deployment-structure>