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

Jenkins插件开发:Stapler JS绑定请求CSRF头不匹配致403/500问题求助

解决Jenkins插件中Stapler-JS绑定的CSRF 403/500问题

针对你在Jenkins v2.452.1中遇到的问题,核心原因是高版本Jenkins的CSRF令牌头规范更新,且直接从API获取的crumb可能和当前会话不匹配,以下是可行的解决方法:

步骤1:在Jelly中注入正确的CSRF令牌信息

在你的Jelly文件开头添加代码,获取当前会话绑定的crumb头名称和值:

<st:set var="crumbIssuer" value="${Jenkins.instance.crumbIssuer}" />
<st:set var="crumbHeader" value="${crumbIssuer.crumbRequestField}" />
<st:set var="crumbValue" value="${crumbIssuer.getCrumb(request)}" />

步骤2:全局配置AJAX请求自动携带CSRF头

在Jelly的JS代码块中,添加jQuery AJAX全局配置,确保所有Stapler发起的请求都带上正确的令牌:

// 注入从Jelly获取的crumb信息
var crumbHeader = '${crumbHeader}';
var crumbValue = '${crumbValue}';

// 全局设置AJAX请求头,覆盖Stapler默认的头名
$.ajaxSetup({
    beforeSend: function(xhr) {
        xhr.setRequestHeader(crumbHeader, crumbValue);
    }
});

// 保留原有的绑定和点击事件逻辑
var it = <st:bind value="${it}"/>

$('#Btn').click(function() {
    it.method();
});

关键说明

  • 不要直接从/crumbIssuer/api/json获取令牌:该接口返回的令牌可能和当前用户会话不绑定,导致验证失败(500错误),必须从当前请求的crumbIssuer实例获取才有效。
  • 全局AJAX配置会自动作用于st:bind生成的JS对象:Stapler内部使用jQuery AJAX发起请求,所以全局配置会覆盖其默认的头设置,解决头名称不匹配(403错误)的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 18:40:15