You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Argon2PasswordEncoder时出现ClassNotFoundException异常求助

排查java.lang.ClassNotFoundException: org.bouncycastle.crypto.params.Argon2Parameters$Builder的思路与方案

核心问题场景

调用Spring Security的Argon2PasswordEncoder时触发类找不到异常,已显式引入org.bouncycastle:bcprov-jdk18on:1.76依赖且确认jar包中存在目标类,但问题依旧。

排查步骤与解决方案

1. 排查Spring Boot DevTools类加载隔离问题

Spring Boot DevTools使用自定义类加载器,可能导致BouncyCastle类被加载到非主类加载器中,引发类找不到问题:

  • 临时注释掉devtools依赖,重新构建运行:
    // developmentOnly("org.springframework.boot:spring-boot-devtools")
    
  • 若问题消失,说明是devtools类加载器冲突,可通过配置spring.devtools.restart.additional-exclude排除BouncyCastle相关包,或直接在生产环境禁用devtools。

2. 检查依赖版本兼容性

Spring Security Crypto 6.1.4对BouncyCastle版本有要求,1.76版本可能存在兼容问题:

  • 升级bcprov-jdk18on到最新稳定版(如1.78):
    implementation("org.bouncycastle:bcprov-jdk18on:1.78")
    
  • 或使用Spring Boot依赖管理推荐的版本,避免手动指定版本引发冲突:
    dependencyManagement {
        dependencies {
            dependency("org.bouncycastle:bcprov-jdk18on:1.78")
        }
    }
    

3. 排查依赖传递冲突

项目中其他依赖可能引入旧版本BouncyCastle,导致类版本不一致:

  • 执行Gradle命令查看依赖树:
    ./gradlew dependencies
    
  • 搜索bcprov或bouncycastle相关依赖,若发现低版本,在依赖声明中排除:
    implementation("org.bouncycastle:bcprov-jdk18on:1.78") {
        exclude(group = "org.bouncycastle", module = "bcprov-jdk15on")
    }
    

4. 验证打包与运行时类路径

  • 检查打包后的jar文件是否包含目标类:
    jar tf build/libs/your-project-name.jar | grep "Argon2Parameters\$Builder"
    
  • 若IDE运行时异常,检查模块依赖配置,确保bcprov-jdk18on未被标记为"Provided"或排除。

5. Java模块系统配置检查(Java 9+)

若项目启用了Java模块系统,需在module-info.java中声明依赖:

requires org.bouncycastle.provider;

内容的提问来源于stack exchange,提问作者Javaddict

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 19:14:55