Keycloak添加自定义UserStorageProviderFactory致默认用户存储提供者消失
Keycloak自定义UserStorageProvider导致默认提供者消失的原因及解决方法
原因
- 自定义jar包重复打包了Keycloak核心依赖,且SPI配置文件
META-INF/services/org.keycloak.storage.UserStorageProviderFactory仅包含了你的自定义工厂类路径,覆盖了Keycloak原生SPI配置。Keycloak加载SPI时会合并同路径的SPI文件,若你的文件未包含LDAP、Kerberos等原生提供者的类路径,就会导致原生提供者无法被加载。 - 打包时使用了shade插件或fat jar模式,将Keycloak核心类也打包进自定义jar,引发类加载冲突,导致原生提供者无法正常初始化。
解决方法
- 调整依赖范围:将Maven/Gradle中Keycloak相关依赖设置为
provided(Maven)或compileOnly(Gradle),避免打包时将核心依赖打进jar包。示例Maven配置:<dependency> <groupId>org.keycloak</groupId> <artifactId>keycloak-server-spi</artifactId> <version>21.0.2</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.keycloak</groupId> <artifactId>keycloak-server-spi-private</artifactId> <version>21.0.2</version> <scope>provided</scope> </dependency> - 检查SPI配置文件:确保
META-INF/services/org.keycloak.storage.UserStorageProviderFactory中仅包含你的自定义工厂类路径,无需手动添加原生提供者路径(Keycloak会自动加载原生jar中的对应配置)。 - 重新打包为thin jar:仅包含自定义代码和必要第三方依赖,不包含Keycloak核心类,放入providers目录后重新执行
kc.sh build并启动Keycloak。
内容的提问来源于stack exchange,提问作者DangTri
相关产品推荐
相关产品推荐

