首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试为密钥罩创建自定义身份验证器提供程序时来自Maven deploy的NoClassDefFoundError

尝试为密钥罩创建自定义身份验证器提供程序时来自Maven deploy的NoClassDefFoundError
EN

Stack Overflow用户
提问于 2021-01-14 15:04:05
回答 1查看 194关注 0票数 2

我正在实现一个Keycloak身份验证提供者(用于Keycloak 6.0.1),它在用户临时锁定时返回一条消息(就像在Keycloak Custom message on user temporary lock中指定的那样)。

当我执行mvn clean install wildfly:deploy时,我会得到:

代码语言:javascript
复制
[ERROR]     Caused by: java.util.ServiceConfigurationError: org.keycloak.authentication.AuthenticatorFactory: Provider com.mumba.cloud.authenticator.LockedUserAuthenticatorFactory could not be instantiated
[ERROR]     Caused by: java.lang.NoClassDefFoundError: Failed to link com/mumba/cloud/authenticator/LockedUserAuthenticator (Module \"deployment.lockeduser-authenticator-1.0-SNAPSHOT.jar\" from Service Module Loader): org/keycloak/authentication/authenticators/browser/UsernamePasswordForm"}}}}

我正在寻找一些关于如何追踪为什么我得到java.lang.NoClassDefFoundError和为什么Maven (或者可能是wildfly)找不到org/keycloak/authentication/authenticators/browser/UsernamePasswordForm的帮助

这不是编译时错误,我相信下面的导入语句对于UsernamePasswordForm是正确的(参见下面的代码)。

我还认为我已经正确地将依赖项(keycloak-services)添加到我的pom.xml中(如下所示)。

我对Maven (和Java/Keycloak开发)非常陌生,所以我不确定从哪里可以找到它。

有谁有什么建议吗?

代码语言:javascript
复制
package com.mumba.cloud.authenticator;

import org.keycloak.authentication.authenticators.browser.UsernamePasswordForm;

public class LockedUserAuthenticator extends UsernamePasswordForm  {
    @Override
    protected String tempDisabledError() {
        return "ACCOUNT IS temporarily disabled.";
    }
}

我的pom.xml包括:

代码语言:javascript
复制
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <keycloak-version>6.0.1</keycloak-version>
        <maven.test.skip>true</maven.test.skip>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.keycloak</groupId>
            <artifactId>keycloak-core</artifactId>
            <version>${keycloak-version}</version>
        </dependency>
        <dependency>
            <groupId>org.keycloak</groupId>
            <artifactId>keycloak-services</artifactId>
            <version>${keycloak-version}</version>
        </dependency>
...
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-15 19:06:23

您需要添加显式依赖项,以避免在运行时出现类加载问题。下面是您需要添加到pom.xml中的内容

代码语言:javascript
复制
<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <!-- This is required since we need to add the jboss module references
                            to the resulting jar -->
                        <manifestEntries>
                            <!-- Adding explicit dependencies to avoid class-loading issues at runtime -->
                            <Dependencies>
                                <![CDATA[org.keycloak.keycloak-core,org.keycloak.keycloak-services]]></Dependencies>
                        </manifestEntries>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
</build>

另外,将scope provided添加到您的依赖项中,如下所示:

代码语言:javascript
复制
<dependency>
        <groupId>org.keycloak</groupId>
        <artifactId>keycloak-services</artifactId>
        <version>${keycloak.version}</version>
        <scope>provided</scope>
</dependency>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65714656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档