升级Jenkins后登录跳转j_spring_security_check报404错误如何解决
Jenkins 2.252升级到2.313后登录跳转
j_spring_security_check返回404的排查与解决思路 核心原因说明
该问题90%以上的场景是Jenkins 2.266+版本升级了Spring Security框架,对登录请求的路径、协议、域名匹配校验更加严格,请求信息和Jenkins配置不匹配就会触发404。
排查思路
- 排查反向代理/负载均衡配置
检查反向代理是否正确传递了请求的原始协议、域名、路径信息,X-Forwarded-Proto、X-Forwarded-Host、X-Forwarded-Port三个请求头是必须传递的。如果Jenkins配置了上下文子路径,还要检查代理的rewrite规则是否丢失了路径前缀,导致j_spring_security_check的请求路径缺少子路径前缀。 - 排查Jenkins根URL配置
确认Jenkins配置的根URL和实际访问的URL完全一致,协议(http/https)、域名、端口、上下文子路径不能有任何出入。如果暂时无法登录后台,可以直接修改$JENKINS_HOME/jenkins.model.JenkinsLocationConfiguration.xml文件中的jenkinsUrl字段查看。 - 排查安全类插件兼容性
旧版本的自定义认证插件、LDAP插件、SSO插件和2.313版本自带的Spring Security版本不兼容,也会触发该问题。可以先临时移出$JENKINS_HOME/plugins/目录下非官方默认的安全相关插件文件,重启后测试登录是否正常。 - 排查CSRF防护配置
Jenkins 2.280+调整了CSRF防护的默认逻辑,如果你之前配置过自定义CSRF忽略规则、或者添加过废弃的CSRF相关启动参数,可能会导致登录请求被拦截。可以临时添加禁用CSRF的启动参数测试是否是该原因导致。
解决步骤
- 修正反向代理配置,以Nginx为例,在Jenkins对应的location配置块中添加以下头信息:
proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme;
如果Jenkins使用上下文子路径,需要在启动参数中添加--prefix=/你的子路径,如果用systemd管理Jenkins,修改/etc/systemd/system/jenkins.service的ExecStart字段,修改完成后执行systemctl daemon-reload && systemctl restart jenkins生效。
- 修正Jenkins根URL
编辑$JENKINS_HOME/jenkins.model.JenkinsLocationConfiguration.xml,将jenkinsUrl的值改为你实际访问Jenkins的完整URL,保存后重启Jenkins。 - 升级兼容版本的安全插件
将所有认证相关插件升级到支持Jenkins 2.313的最新兼容版本,第三方未适配的插件暂时停用,等待插件作者更新。 - 临时测试可以禁用CSRF(正式环境请勿长期使用)
在Jenkins启动参数中添加-Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true,重启后验证登录是否正常,确认是CSRF问题后再调整对应的防护规则。
内容的提问来源于stack exchange,提问作者twasbrillig
相关产品推荐
相关产品推荐

