前端统一把未登录和无权限都当 401 处理,结果有权限的用户也被踢回登录页。日志里能对上时间点,这种反而好排。
401 表示身份未认证,403 表示身份已知但无权限,两者触发的客户端行为不同。这一点先确认清楚,后面就不用反复试。
HTTP/1.1 401 Unauthorized WWW-Authenticate: Bearer HTTP/1.1 403 Forbidden
围绕「HTTP 401 与 403」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。
日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。
把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。
处理上按这个顺序:未登录返回 401 并带认证提示;已登录无权限返回 403;前端按状态码分别处理。
结果对不对很好判断,未登录跳登录页,无权限提示无访问权限,用户不再被误踢出。