Keycloak 9.0.2脚本映射器缺失,无法添加请求头声明求助
我来帮你梳理几个可能的原因,按步骤排查应该能解决:
1. 先把Docker镜像版本钉死在9.0.2
你提到用的是Keycloak 9.0.2,但docker-compose里写的是jboss/keycloak:latest——这个标签会自动拉取最新镜像,大概率不是你要的9.0.2版本。不同版本的Keycloak对脚本映射器的启用规则差异很大,先把镜像改成明确的版本:
image: jboss/keycloak:9.0.2
改完后重启容器,确保运行的确实是9.0.2版本。
2. 确认开启了所有必要的预览特性
在Keycloak 9.x里,光开scripts特性可能不够,部分场景下还需要同时开启upload_scripts预览特性(虽然Script mapper是内置功能,但有些版本需要这俩一起开才能显示)。修改你的启动命令:
command: - "-b 0.0.0.0" - "-Djboss.socket.binding.port-offset=1000" - "-Dkeycloak.profile.feature.scripts=enabled" - "-Dkeycloak.profile.feature.upload_scripts=enabled"
重启后看日志,确认两个预览特性都显示“enabled”。
3. 别找错地方了!Script mapper在客户端的Mappers标签里
Script mapper是属于单个客户端的映射器,不是全局设置。你得先进入目标客户端的详情页,切换到Mappers标签,点击Add mapper按钮,在弹出的选项列表里找叫Script的那一项(注意不是全局的映射器配置)。
4. 检查客户端是否允许脚本运行
进入客户端的Settings标签,拉到Advanced区域,确认Allow Scripts选项已经勾选——9.x版本里这个选项默认是关闭的,不打开的话就算全局开了特性也看不到Script mapper。
5. 非Docker版本的额外配置
如果你用的是独立安装包,除了启动参数,还得改配置文件:找到standalone.xml(或standalone-ha.xml),在<profile>下的<subsystem xmlns="urn:jboss:domain:keycloak-server:1.1">节点里加这段配置:
<spi name="script"> <provider name="default" enabled="true"/> </spi>
然后启动时带上-Dkeycloak.profile.feature.scripts=enabled -Dkeycloak.profile.feature.upload_scripts=enabled参数。
按这些步骤走一遍,应该就能找到Script mapper了。
内容的提问来源于stack exchange,提问作者Atatorus

