xxl-job
xxl-job copied to clipboard
The access token is wrong. (now is worked, share my solution)
Which version of XXL-JOB do you using?
xxl-job-admin: 2.4.0 xxl-job-core: 2.3.1
Expected behavior
我使用docker-compose部署
docker pull xuxueli/xxl-job-admin:2.4.0
, 并且自定义了accessToken的值,当我在spring中访问时,总是报错注册失败,The access token is wrong.
Actual behavior
期望注册成功。
Steps to reproduce the behavior
为了解决这个问题,我在网上找了一些资料,问题类型总结如下:
- accessToken里面有特殊字符
- 纯粹accessToken配置写错了,不一致
- 版本问题,调度器和执行器,header name不一致(XXL-RPE-ACCESS_TOKEN或XXL-JOB-ACCESS-TOKEN,在源码的XxlJobRemotingUtil.class中有定义,可以直接比对)
-
部署问题,比如用docker部署xxl-job-admin时,以为自己设置的accessToken值是
a
但实际可能是ab
Other information
针对以上4个可能的问题类型,分享我的寻找问题和解决问题思路。
A:对于问题1,建议改为不含特殊字符的accessToken。(因为accessToken在http header中传播,其value会被转义) B:对于问题2,建议copy相关配置,保证一致。(做完这步还是有问题,就直接往下看) C:对于问题3,使用postman等类似工具,模拟注册请求
# do this by postman:
方法:POST
URL: http://{ip}:{port}/xxl-job-admin/api/registry
Headers:
✅ XXL-RPE-ACCESS_TOKEN write-your-access-token-here
✅ XXL-JOB-ACCESS-TOKEN write-your-access-token-here
(交替勾选header参数,发请求。如果response还是报错`The access token is wrong.`说明当前header不正确;如果response是别的内容,说明此header符合你的xxl-job-admin环境的要求)
D: 如果上述都没问题,那可能是你的xxl-job-admin环境有问题。常见于采用docker或者docker-compose部署时产生问题。
version: '3'
services:
xxl-job:
image: harbor.my.com:11443/library/xxl-job-admin:2.4.0
restart: always
container_name: xxl-job
network_mode: "host"
ports:
- '9911:8080'
volumes:
- /var/log/xxljob:/data/applogs
environment:
- TZ=Asia/Shanghai
- JAVA_OPTS="-Xms1024m -Xmx1024m -Xmn1024m"
- PARAMS="--logging.level.com.zaxxer.hikari.HikariConfig=DEBUG --logging.level.com.zaxxer.hikari=DEBUG --spring.datasource.url=jdbc:mysql://192.168.1.211:3306/xxl_job?allowPublicKeyRetrieval=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true --spring.datasource.username=xxljob --spring.datasource.password=xxljob_1qazXSW --xxl.job.accessToken=1qazxsw23dev"
- PARAMS=--logging.level.com.zaxxer.hikari.HikariConfig=DEBUG --logging.level.com.zaxxer.hikari=DEBUG --spring.datasource.url=jdbc:mysql://192.168.1.211:3306/xxl_job?allowPublicKeyRetrieval=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true --spring.datasource.username=xxljob --spring.datasource.password=xxljob_1qazXSW --xxl.job.accessToken=1qazxsw23dev
第一个PARAMS是有问题的,第二个PARAMS是正常的,它们的区别仅仅在于value的首尾双引号。
第一个accessToken实际是1qazxsw23dev\"
,第二个accessToken符合期望,是1qazxsw23dev
。
我是拉取了xxl-job-admin: 2.4.0的源码,并且把变量写在异常日志中对比,才发现这个问题:
经过以上4个方面排查,相信能解决The access token is wrong.
的问题