【已解决】xxljob连接报错HTTP 302(HTTP 401账号或密码错误)

目录

问题现象:

问题分析:

        1、密码中的特殊字符。

        2、密码长度问题。

解决方法:

拓展:


问题现象:

        今天在生产环境使用xxljob任务调度来创建并执行任务时,出现了程序报错:

【已解决】xxljob连接报错HTTP 302(HTTP 401账号或密码错误)_第1张图片

        通过查询xxljob日志:

【已解决】xxljob连接报错HTTP 302(HTTP 401账号或密码错误)_第2张图片

        定位到报错点的代码,检查代码并本地debug后,发现是没问题的;而且在开发环境、测试环境一直都能正常运行,为啥到生产环境就报错了呢?真是百思不得其解,后来只能不断翻看接口调用相关的服务日志,终于看到了一丝异常:在接口调用结束后,我发现了如图所示的信息::

【已解决】xxljob连接报错HTTP 302(HTTP 401账号或密码错误)_第3张图片


问题分析:

        从图片中可以得知一下几个信息:

        1、从>> trigger Xxl-job << response关键词可知:这是本服务连接xxljob后,xxljob响应的相关信息;

        2、从[HTTP/1.1 302 Found]可知:这是重定向错误;

        3、从[keep-alive]可知:这应该是本服务和xxljob服务间的心跳检测机制,也就是会定期的发送连接请求来检查两服务间的正常通信;

        4、从Location所示地址可知:心跳机制的链接是xxljob服务的登录接口,通过浏览器访问就可以看到如下图所示的登录界面:

【已解决】xxljob连接报错HTTP 302(HTTP 401账号或密码错误)_第4张图片

        当时看到这个302报错的时候,真的是一脸懵逼,为啥会是重定向错误呢?难道是ip有误?域名不对?服务间开启了防火墙导致无法调用?做了nginx转发后url写错了?

        于是我就去看了本服务中的xxljob配置:

【已解决】xxljob连接报错HTTP 302(HTTP 401账号或密码错误)_第5张图片

        经过反反复复的检查,依旧发现不出任何问题。

        也试过ip和域名的方式访问xxljob,还是没有发现问题所在。

        最终只能采用最基础的方法:直接在自己的本地debug连接到生产环境的xxljob,看看是否也会报错,通过在本地调用xxljob的登录api,终于发现了问题真正的报错信息:

账号或密码错误

        至此,才明白原来并不是302报错,这应该是401报错才对啊!

        既然知道真正的报错信息,那问题就好办了。

        通过对比开发环境、测试环境、生产环境的账号和密码发现:

        三个环境的账号是一样的,那问题肯定就出在密码上面了,其中开发环境、测试环境的密码是一样的,生产环境的密码会复杂很多,毕竟是考虑了安全性

        1、密码中的特殊字符。

        2、密码长度问题。

        亲测发现,三个环境的密码都带有特殊字符,所以排除了原因1;通过上文中提到的xxljob的登录界面中输入密码发现,原来xxljob的密码长度上限是18位,超过18位后的输入无效;通过查看三个环境的密码发现:开发、测试环境的密码是一样的,且长度并未超过18位,而生产环境的密码刚好就是19位,超过了xxljob的密码长度上限(18位) 。

【已解决】xxljob连接报错HTTP 302(HTTP 401账号或密码错误)_第6张图片

        终于定位到了问题原因,那接下来解决问题就变得非常简单了。


解决方法:

        首先是修改xxljob服务的密码,保证密码长度不超过18位;然后是修改各服务中调用的xxljob服务配置的密码;重启服务后即可正常连接了:

【已解决】xxljob连接报错HTTP 302(HTTP 401账号或密码错误)_第7张图片


拓展:

        按我的理解【账号或密码错误】这个应该是属于HTTP 401错误才对,也就是身份认证失败,用户没有访问权限;实在没懂为什么心跳机制会出现HTTP 302错误?

        简单地在网上查了一下资料,发现找不到有和我类似情况的有用信息,希望有知道原因的大佬赐教一下!否则只能是自己在日后有时间上xxljob官网查查文档了。

你可能感兴趣的:(http,网络协议,网络)