java - 使用 org.keycloak.authentication.authenticators.broker.util 中的类时提供程序 jar 中的 NoClassDefFoundError
问题描述
我正在为 keycloak 编写 Authenticator 提供程序,我将其打包为.jar
. 一旦它使用来自 keycloak-services 的类,我就会得到一个NoClassDefFoundError
. 当通过“ mvn wildfly:deploy
”部署提供程序时,我得到了同样的错误。
我一定是遗漏了一些东西,但我很少编写 java 代码,此时我一无所知。
我在 pom.xml 中定义了依赖项,并尝试了“提供”和“编译”作为范围:
<dependencies>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-core</artifactId>
<scope>provided</scope>
<version>${keycloak.version}</version>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-server-spi</artifactId>
<scope>provided</scope>
<version>${keycloak.version}</version>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-server-spi-private</artifactId>
<scope>provided</scope>
<version>${keycloak.version}</version>
</dependency>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<scope>provided</scope>
<version>3.1.4.GA</version>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-services</artifactId>
<scope>provided</scope>
<version>${keycloak.version}</version>
</dependency>
</dependencies>
将以下代码添加到身份验证函数后,我会立即收到错误消息:
AuthenticationSessionModel authSession = context.getAuthenticationSession();
SerializedBrokeredIdentityContext serializedCtx =
SerializedBrokeredIdentityContext.readFromAuthenticationSession(
authSession, "BROKERED_CONTEXT");
我得到的错误:
20:05:03,844 ERROR [org.keycloak.services.error.KeycloakErrorHandler] (default task-6) Uncaught server error: java.lang.NoClassDefFoundError: org/keycloak/authentication/authenticators/broker/util/SerializedBrokeredIdentityContext
解决方案
因为 wildfly 隔离了类加载器,所以我必须在 META-INF/MANIFEST.MF 文件中声明依赖项。
为此,我将以下代码添加到我的 pom.xml 文件中:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestEntries>
<Dependencies>org.keycloak.keycloak-services</Dependencies>
</manifestEntries>
</archive>
</configuration>
</plugin>
(解决方案是在keycloak用户列表上给我的:https ://lists.jboss.org/pipermail/keycloak-user/2019-September/019108.html )
推荐阅读
- visual-studio - 如何修复“命名空间microsoft.visualstudio中不存在类型或命名空间名称'xmleditor'(您是否缺少程序集引用?)”
- javascript - 关闭命令上下文时如何解决错误
- javascript - Javascript / Php 如何在文件中应用“\n”和“\r”进行下载
- javascript - 如何使用 Firestore 文档中的另一个值限制 Firestore 查询限制?
- haskell - 如何从(String,())制作(String,Int)?
- azure-active-directory - 在哪里配置出现在 account.activedirectory.windowsazure.com 门户中的应用程序
- groovy - groovy中的Ant样式通配符路径字符串匹配
- debugging - Kotlin 可空比较:不同的表达式与函数结果
- python - AttributeError:“int”对象没有属性“_erase”
- ios - 当用于同时下载多个时,URLSessionDownloadTask 调用并不总是有效