当通过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 服务让设置生效

相关推荐
爱倒腾的老唐12 小时前
24、Linux 路由管理
linux·运维·网络
yannan2019031312 小时前
Docker容器
运维·docker·容器
_清浅12 小时前
计算机网络【第六章-应用层】
运维·服务器·计算机网络
正在努力的小河13 小时前
Linux 自带的 LED 灯驱动实验
linux·运维·服务器
李子圆圆13 小时前
电力专用多功能微气象监测装置在电网安全运维中的核心价值是什么?
运维·安全
花开富贵贼富贵13 小时前
MySQL 核心高级特性
运维·数据库·mysql
小宁爱Python13 小时前
Windows Docker Desktop占用C盘空间过大解决办法集合
运维·docker·容器
恒创科技HK14 小时前
如何选30G、60G、100G的香港高防服务器?
运维·服务器
wanhengidc14 小时前
云手机 手游专用虚拟手机
运维·服务器·安全·游戏·智能手机
檀越剑指大厂14 小时前
【Linux系列】Vim 中删除当前光标到行尾
linux·运维·vim