当通过API发送请求的方式自动触发Jenkins job报错HTTP Status 403 – Forbidden的解决办法

报错场景:

当通过代码发送API请求去触发jenkins job报错403

分析报错的原因:

这个报错说明 Jenkins API 请求缺少 CSRF 防护的"crumb"令牌(防止跨站请求伪造)。

解决方法如下:

  1. 在 API 请求中带上 crumb

  2. 关闭 CSRF 防护(不推荐,安全风险)

由于不是在生产环境,所以选择最简单的方案解决,就是关闭CSRF防护

具体操作步骤: (Jenkins的部署方式是通过jenkins.war的方式放入Tomcat中运行的并且作为windows 服务启动)

Windows 服务方式

如果 Jenkins 作为 Windows 服务运行,可以在服务属性的"Java Options"里添加:

  1. 找到 Tomcat 的启动脚本

    通常在 bin 目录下,如 catalina.bat

  2. 设置 JAVA_OPTS 环境变量

    在启动脚本中添加如下内容(以 Windows 为例):

    catalina.bat 的开头添加:

    java 复制代码
    set JAVA_OPTS=-Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true %JAVA_OPTS%

    具体的位置例如:

java 复制代码
setlocal

set JAVA_OPTS=-Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true %JAVA_OPTS%

rem Suppress Terminate batch job on CTRL+C
if not ""%1"" == ""run"" goto mainEntry
if "%TEMP%" == "" goto mainEntry
if exist "%TEMP%%<del>nx0.run" goto mainEntry
echo Y>"%TEMP%%</del>nx0.run"
if not exist "%TEMP%%<del>nx0.run" goto mainEntry
echo Y>"%TEMP%%</del>nx0.Y"
call "%<del>f0" %* <"%TEMP%%</del>nx0.Y"
rem Use provided errorlevel
set RETVAL=%ERRORLEVEL%
del /Q "%TEMP%%<del>nx0.Y" >NUL 2>&1
exit /B %RETVAL%
:mainEntry
del /Q "%TEMP%%</del>nx0.run" >NUL 2>&1

4.重启windows 服务让设置生效

相关推荐
_F_y17 分钟前
Linux网络常用指令
linux·运维·网络
北风toto1 小时前
扩展操作码技术 · 详细笔记
运维·服务器·笔记·软件设计师
笑霸final1 小时前
不用上传服务器!用 Vue3 + ONNX Runtime Web 在浏览器本地实现智能抠图
运维·前端·图像处理·ai·onnx·canva可画·web性能优化
2601_962218471 小时前
万象生鲜系统跨仓调拨算法助力生鲜企业供应链数字化协同运营
大数据·运维·微服务·云原生·架构
2601_962218472 小时前
万象生鲜系统多仓协同同步技术支撑生鲜企业多仓模式数字化转型
大数据·运维·微服务·云原生·架构
mooooooooooye2 小时前
SSH 工具越用越乱,Xterminal 先清掉这三类失效连接
运维·ssh·github
qetfw2 小时前
Debian lftp FTP 客户端使用:登录、目录切换与文件传输
linux·运维·debian
2401_862880823 小时前
Linux应用层开发 --- 管道
linux·运维·c语言
隔窗听雨眠3 小时前
TDengine在AIOps中的硬核实战:从时序数据存储到智能运维的完整落地路径
大数据·运维·tdengine
2601_962128263 小时前
Nginx知识详解(理论+实战更易懂)
运维·nginx