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

Keycloak对接远程Infinispan缓存时出现ClassCastException问题求助

Keycloak对接Infinispan远程缓存ClassCastException问题解决

问题原因

你的配置存在两个核心问题:

  1. 缓存映射错误:Keycloak所有类型的会话缓存(sessions、authenticationSessions、offlineSessions等)的远程store都配置了cache=actionTokens,导致不同类型的会话数据全部存入Infinispan的actionTokens缓存中。当Keycloak尝试从对应缓存读取数据时,拿到的是其他类型的数据(甚至是布尔值标记),无法转换为预期的SessionEntityWrapper或RootAuthenticationSessionEntity,触发ClassCastException。
  2. 版本兼容性不匹配:Keycloak 16.1.1官方适配的Infinispan版本为12.x系列(如12.1.12.Final),你使用的Infinispan 14属于跨大版本升级,存在序列化协议、API兼容性问题,会加重类型转换异常。

修复步骤

1. 修正Keycloak远程缓存映射配置

将每个缓存的远程store的cache参数修改为与Keycloak缓存同名的值,示例如下:

# 修正work缓存远程store
/subsystem=infinispan/cache-container=keycloak/replicated-cache=work/store=remote:write-attribute(name=cache, value=work)

# 修正sessions缓存远程store
/subsystem=infinispan/cache-container=keycloak/distributed-cache=sessions/store=remote:write-attribute(name=cache, value=sessions)

# 修正authenticationSessions缓存远程store
/subsystem=infinispan/cache-container=keycloak/distributed-cache=authenticationSessions/store=remote:write-attribute(name=cache, value=authenticationSessions)

# 修正offlineSessions缓存远程store
/subsystem=infinispan/cache-container=keycloak/distributed-cache=offlineSessions/store=remote:write-attribute(name=cache, value=offlineSessions)

# 修正clientSessions缓存远程store
/subsystem=infinispan/cache-container=keycloak/distributed-cache=clientSessions/store=remote:write-attribute(name=cache, value=clientSessions)

# 修正offlineClientSessions缓存远程store
/subsystem=infinispan/cache-container=keycloak/distributed-cache=offlineClientSessions/store=remote:write-attribute(name=cache, value=offlineClientSessions)

# 修正loginFailures缓存远程store
/subsystem=infinispan/cache-container=keycloak/distributed-cache=loginFailures/store=remote:write-attribute(name=cache, value=loginFailures)

# actionTokens缓存保持原配置即可
/subsystem=infinispan/cache-container=keycloak/distributed-cache=actionTokens/store=remote:write-attribute(name=cache, value=actionTokens)

2. 清理Infinispan缓存数据

删除Infinispan中actionTokens缓存的所有旧数据(因为之前混入了其他类型的会话数据),可以通过Infinispan控制台或CLI执行:

# 假设使用Infinispan CLI连接集群后执行
cache clear --cache=actionTokens

3. 调整Infinispan版本至兼容版本

将Infinispan集群降级至Keycloak 16.1.1适配的版本(推荐12.1.12.Final),避免跨版本序列化协议不兼容问题。如果无法降级,需要确保Infinispan的序列化配置完全匹配Keycloak要求:

  • 保持Infinispan的GenericJBossMarshaller配置,确保allow-list包含所有Keycloak相关类。
  • 验证HotRod协议版本与Keycloak配置的protocolVersion=${env.HOTROD_VERSION:2.8}匹配(Infinispan 14默认支持HotRod 2.8,但需确认)。

4. 重启服务

重新启动Keycloak和Infinispan集群,确保配置生效。

验证

  • 登录Keycloak管理控制台,查看用户会话列表,确认无ClassCastException错误。
  • 模拟用户登录、登出操作,检查会话数据正常存入/读取Infinispan对应缓存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 05:22:03