isValid() 方法中的 Keycloak ClassCastException
Keycloak ClassCastException in isValid() method
我是 运行 Docker 容器中的 Keycloak 服务器。然后我编写了一个自定义用户存储提供程序来检查身份验证。
问题是在我的 CredentialInputValidator 实现中,方法
public boolean isValid(RealmModel realmModel, UserModel userModel, CredentialInput credentialInput)
以 org.keycloak.models.cache.infinispan.UserAdapter 的实例作为第二个参数 (userModel) 调用。
我希望有一个 MyCustomUserModel 实例,这就是方法
public UserModel getUserByUsername(String username, RealmModel realm)
回来了。所以我尝试将 userModel 转换为 MyCustomUserModel 并抛出以下异常:
Uncaught server error: java.lang.ClassCastException: class
org.keycloak.models.cache.infinispan.UserAdapter cannot be cast to
class com.package.MyCustomUserModel
(org.keycloak.models.cache.infinispan.UserAdapter is in unnamed module
of loader 'org.keycloak.keycloak-model-infinispan@11.0.0' @35823d20;
com.package.MyCustomUserModel is in unnamed module of loader
'deployment.keycloak_custom_ext_ear-0.0.1-SNAPSHOT.ear.keycloak_custom_ext-0.0.1-SNAPSHOT.jar'
@139eb90f)
事实上,使用我在其他测试中使用的其他 Keycloak 服务器,完全相同的用户存储提供程序正在按预期工作(MyCustomUserModel 的一个实例)。
也许我在配置 Keycloak 服务器时失败了,但我不知道可能涉及什么选项。知道问题出在哪里吗?
问题出在缓存策略中。在 Keycloak 的管理应用程序中,在用户联合部分下,编辑我的用户存储提供程序并选择 NO_CACHE 作为缓存策略。
ClassCastException 不再出现。
我想如果我将来需要缓存,我将需要为此付出更多努力。
我是 运行 Docker 容器中的 Keycloak 服务器。然后我编写了一个自定义用户存储提供程序来检查身份验证。
问题是在我的 CredentialInputValidator 实现中,方法
public boolean isValid(RealmModel realmModel, UserModel userModel, CredentialInput credentialInput)
以 org.keycloak.models.cache.infinispan.UserAdapter 的实例作为第二个参数 (userModel) 调用。
我希望有一个 MyCustomUserModel 实例,这就是方法
public UserModel getUserByUsername(String username, RealmModel realm)
回来了。所以我尝试将 userModel 转换为 MyCustomUserModel 并抛出以下异常:
Uncaught server error: java.lang.ClassCastException: class org.keycloak.models.cache.infinispan.UserAdapter cannot be cast to class com.package.MyCustomUserModel (org.keycloak.models.cache.infinispan.UserAdapter is in unnamed module of loader 'org.keycloak.keycloak-model-infinispan@11.0.0' @35823d20; com.package.MyCustomUserModel is in unnamed module of loader 'deployment.keycloak_custom_ext_ear-0.0.1-SNAPSHOT.ear.keycloak_custom_ext-0.0.1-SNAPSHOT.jar' @139eb90f)
事实上,使用我在其他测试中使用的其他 Keycloak 服务器,完全相同的用户存储提供程序正在按预期工作(MyCustomUserModel 的一个实例)。
也许我在配置 Keycloak 服务器时失败了,但我不知道可能涉及什么选项。知道问题出在哪里吗?
问题出在缓存策略中。在 Keycloak 的管理应用程序中,在用户联合部分下,编辑我的用户存储提供程序并选择 NO_CACHE 作为缓存策略。
ClassCastException 不再出现。
我想如果我将来需要缓存,我将需要为此付出更多努力。