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

Keycloak邮件模板访问角色、分组等上下文变量的方法咨询

Keycloak 11.0.x 邮件模板访问用户角色、分组的实现方法

你需要的角色、分组数据不需要修改Java源码就能直接在ftl模板中获取,核心是利用FreeMarkerEmailTemplateProvider默认注入但未公开说明的session、realm上下文变量,具体实现方式如下:

前置说明

你之前拿到的user变量是封装后的ProfileBean对象,仅开放基础属性,我们可以通过user.attributes.id拿到用户唯一ID,再结合session、realm变量获取完整的用户模型对象。

1. 获取用户所属分组

在executeActions.ftl中插入以下代码即可遍历分组:

<#-- 获取完整用户模型 -->
<#assign targetUser = session.users().getUserById(realm, user.attributes.id)>
<#-- 遍历用户所有分组 -->
<#list targetUser.groups as group>
- 分组名称:${group.name}
<#-- 可选:获取分组的自定义属性 -->
<#if group.attributes?has_content && group.attributes['备注']?has_content>
  分组备注:${group.attributes['备注'][0]}
</#if>
</#list>

2. 获取用户所属角色

领域级角色(全局角色)

<#list targetUser.realmRoleMappings as role>
<#if !role.clientRole>
- 领域角色:${role.name}
</#if>
</#list>

指定客户端的角色

<#-- 替换为你实际的客户端clientId -->
<#assign appClient = realm.getClientByClientId("your-client-id")>
<#list targetUser.getClientRoleMappings(appClient) as role>
- 客户端角色:${role.name}
</#list>

附:打印所有可用上下文变量

如果后续需要排查其他可用变量,直接在模板中插入以下代码即可输出所有内置变量名:

<#list .data_model?keys as varKey>
${varKey}
</#list>

以上方法完全兼容官方Docker镜像,不需要修改任何Java代码,直接调整模板即可生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:36:03