xxl-job icon indicating copy to clipboard operation
xxl-job copied to clipboard

The access token is wrong. (now is worked, share my solution)

Open dingziyang opened this issue 1 year ago • 0 comments

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

为了解决这个问题,我在网上找了一些资料,问题类型总结如下:

  1. accessToken里面有特殊字符
  2. 纯粹accessToken配置写错了,不一致
  3. 版本问题,调度器和执行器,header name不一致(XXL-RPE-ACCESS_TOKEN或XXL-JOB-ACCESS-TOKEN,在源码的XxlJobRemotingUtil.class中有定义,可以直接比对)
  4. 部署问题,比如用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的源码,并且把变量写在异常日志中对比,才发现这个问题: image


经过以上4个方面排查,相信能解决The access token is wrong.的问题

dingziyang avatar Nov 21 '23 08:11 dingziyang