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

升级Keycloak至22.0.0遇NoSuchFieldError:FIPS问题求助

解决Keycloak 22.0.0升级后NoSuchFieldError: FIPS问题

问题根源

Keycloak 22.x版本对安全模块做了重构,移除或重命名了旧版本里的FIPS常量字段,你使用的第三方HTTP事件监听器jar直接引用了这个字段——哪怕更新了pom依赖版本,jar包编译后的代码仍保留对旧字段的引用,最终导致类加载冲突。

具体解决思路

  • 修改监听器代码中的旧字段引用

    1. 拉取第三方监听器源码,搜索所有引用FIPS字段的位置(通常关联org.keycloak.common.util.SecurityConstants类)。
    2. 对照Keycloak 22.x源码确认替代方案:
      • 若字段被重命名,直接替换为新的常量名;
      • 若字段被移除,删除相关引用逻辑,改用Keycloak 22.x提供的安全配置API实现相同功能。
    3. 基于Keycloak 22.x依赖重新编译打包jar包。
  • 修正pom依赖范围避免冲突
    在监听器的pom.xml中,将所有Keycloak相关依赖的scope设为provided,防止打包时把旧版本Keycloak核心类打进jar包,与Keycloak 22.x内置类冲突:

    <dependencies>
        <dependency>
            <groupId>org.keycloak</groupId>
            <artifactId>keycloak-core</artifactId>
            <version>22.0.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.keycloak</groupId>
            <artifactId>keycloak-server-spi</artifactId>
            <version>22.0.0</version>
            <scope>provided</scope>
        </dependency>
        <!-- 其他Keycloak相关依赖同理设置 -->
    </dependencies>
    

    执行mvn clean package重新打包,确保jar包仅包含监听器自身代码。

  • 改用Keycloak内置HTTP事件监听器
    Keycloak 19及以上版本已内置HTTP事件监听器SPI,无需依赖第三方jar。直接在启动命令中启用并配置即可:

    /opt/keycloak/bin/kc.sh start --proxy=edge --hostname-strict=false --db-username=${DB_USERNAME} --db-password=${DB_PASSWORD} --spi-events-listener-http-enabled=true --spi-events-listener-http-server-uri=https://authserver.com/api/endpoint
    

    该内置监听器功能与第三方版本一致,且完全兼容Keycloak 22.x。

  • 临时降级到Keycloak 21.x版本
    如果暂时无法修改第三方监听器,可以先将镜像版本切换到quay.io/keycloak/keycloak:21.1.2,该版本仍保留FIPS字段,能正常兼容旧监听器jar,等完成监听器适配后再升级到22.x。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 04:42:51