canal问题记录:something goes wrong when doing authentication: auth failed for user:

一、问题描述

部署了1.15服务端 canal.deployer-1.1.5 用于监听mysql的binlog日志,同时在项目中集成了canal client,用于在监听到指定数据表变化时自定义写入es。

服务端配置:
在这里插入图片描述
客户端配置:

   public void run() {// 创建链接CanalConnector connector = CanalConnectors.newSingleConnector(new InetSocketAddress(canalConfig.getDeployerIp(), canalConfig.getPort()),canalConfig.getDestination(), "test", "123456");try {// 打开连接connector.connect();log.info("=====connector.connect()连接成功======");// 订阅数据库表,来覆盖服务端初始化时的设置connector.subscribe("nlc.works");// 回滚到未进行ack的地方,下次fetch的时候,可以从最后一个没有ack的地方开始拿connector.rollback();while (true) {// 获取指定数量的数据Message message = connector.getWithoutAck(BATCH_SIZE);// 获取批量IDlong batchId = message.getId();// 获取批量的数量int size = message.getEntries().size();// 如果没有数据if (batchId == -1 || size == 0) {try {// 线程休眠1秒Thread.sleep(1000);
//                        log.info("=============暂无数据同步===============");} catch (InterruptedException e) {e.printStackTrace();}} else {// 如果有数据,处理数据
//                    log.info("canal同步进行中...");parseEntry(message.getEntries());}// 进行 batch id 的确认connector.ack(batchId);}} catch (Exception e) {e.printStackTrace();} finally {connector.disconnect();}}

报错信息如下:

com.alibaba.otter.canal.protocol.exception.CanalClientException: something goes wrong when doing authentication: auth failed for user:testat com.alibaba.otter.canal.client.impl.SimpleCanalConnector.doConnect(SimpleCanalConnector.java:192)at com.alibaba.otter.canal.client.impl.SimpleCanalConnector.connect(SimpleCanalConnector.java:115)at com.cxstar.business.es.canal.CanalClient.run(CanalClient.java:63)at sun.reflect.GeneratedMethodAccessor49.invoke(Unknown Source)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84)at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:95)at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:266)at java.util.concurrent.FutureTask.run(FutureTask.java)at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at java.lang.Thread.run(Thread.java:748)

问题分析

这个错误表明在 Canal 客户端的身份验证过程中发生了问题,导致用户 “test” 的身份验证失败,从而无法连接到 Canal 服务器。但是服务端和客户端的账户密码是一致的,不应该会有此问题。

问题排查

下载源码进行debug,可以看到传入的参数是进行过加密的,并且把服务端的密码进行相同的加密后,两个密码字符串是一致的。说明报错问题就在于红框出的代码!
在这里插入图片描述
源码修改:注释掉原有的密码校验的方法,直接使用相同的加密方法验证密码是否一致

 public boolean auth(String user, String passwd, byte[] seed) {// 如果user/passwd密码为空,则任何用户账户都能登录if ((StringUtils.isEmpty(this.user) || StringUtils.equals(this.user, user))) {if (StringUtils.isEmpty(this.passwd)) {return true;} else if (StringUtils.isEmpty(passwd)) {// 如果server密码有配置,客户端密码为空,则拒绝return false;}try {// 自己加的代码:对于服务端的密码进行与客户端相同的加密规则后的内容String serverPasswd = SecurityUtil.byte2HexStr(SecurityUtil.scramble411(this.passwd.getBytes(), seed));return org.apache.commons.lang3.StringUtils.equals(passwd, serverPasswd);/// 注释原因:源码中的密码比较方法存在问题//byte[] passForClient = SecurityUtil.hexStr2Bytes(passwd);// return SecurityUtil.scrambleServerAuth(passForClient, SecurityUtil.hexStr2Bytes(this.passwd), seed);} catch (NoSuchAlgorithmException e) {return false;}}return false;}

打包替换,注意是在server目录下打包!
在这里插入图片描述

在这里插入图片描述
替换重启后解决用户认证问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/753052.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全流程ArcGIS Pro技术应用

GIS是利用电子计算机及其外部设备,采集、存储、分析和描述整个或部分地球表面与空间信息系统。简单地讲,它是在一定的地域内,将地理空间信息和 一些与该地域地理信息相关的属性信息结合起来,达到对地理和属性信息的综合管理。GIS的…

Trustzone和Tee的基本概念区分

Trustzone和Tee的基本概念区分 TrustZone:可信 区域,TrustZone是ARM处理器提供的一种特性或安全方案,而TEE是一个更广泛的概念,包含了TrustZone以及其他可以实现类似功能的解决方案。 ARM公司于2006年提出了一种硬件虚拟化技术TrustZone及其相关硬件实现方案。TrustZone即…

P3392 涂国旗 python解法

P3392 涂国旗 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) n,mmap(int,input().split()) arr[] ks[] ans100000000 #因为要比较最小值,这里由于数据较小可以设置这么大,数据要再大的话就设置最大常量 #前i行涂蓝成本b[i],涂红成本r[i],涂白成本w[i],…

代码随想录阅读笔记-哈希表【四数之和】

题目 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a b c d 的值与 target 相等?找出所有满足条件且不重复的四元组。 注意:答案中不可以包…

Linux-find命令

在Linux下&#xff0c;要查找文件&#xff0c;可以使用find命令。find命令能够在指定的目录及其子目录中查找文件&#xff0c;并且支持使用多种条件进行过滤。 以下是find命令的基本用法&#xff1a; find <路径> <选项> <表达式> 常用选项包括&#xff1a;…

网络协议与层次划分:探索计算机网络体系结构

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

Vulnhub - Symfonos

希望和各位大佬一起学习&#xff0c;如果文章内容有错请多多指正&#xff0c;谢谢&#xff01; 个人博客链接&#xff1a;CH4SER的个人BLOG – Welcome To Ch4sers Blog Symfonos 靶机下载地址&#xff1a;https://www.vulnhub.com/entry/symfonos-1,322/ 0x01 信息收集 …

鼎阳SDS6204示波器EPICS IOC的搭建

三年前曾写过这个文&#xff1a; 鼎阳SDS6204示波器的EPICS IOC调试 文章里有EPICS网站设备IOC搭建的指南&#xff0c;具体搭建IOC的步骤就没详细写了&#xff0c;几年后重新搭建时发现还是费了些力气才搭建起来&#xff0c;因此写此文记录下手把手的过程方便自己以及EPICS的初…

【论文阅读】MSGNet:学习多变量时间序列预测中的多尺度间序列相关性

MSGNet&#xff1a;学习多变量时间序列预测中的多尺度间序列相关性 文献介绍摘要总体介绍背景及当前面临的问题现有解决方案及其局限性本文的解决方案及其贡献 背景知识的相关工作背景知识问题表述&#xff1a; Method论文主要工作1.输入嵌入和剩余连接 (Input Embedding and R…

windows的mysql8.0.24版本mysql初始化

在Windows下进行MySQL 8.0.24版本的数据库初始化&#xff0c;可以按照以下步骤进行&#xff1a; 下载MySQL 8.0.24的安装包&#xff0c;解压到指定目录。 打开命令行终端&#xff0c;以管理员身份运行&#xff0c;进入MySQL安装目录的bin文件夹。 执行以下命令进行初始化&#…

工业AMR机器人如何实现规模化的柔性生产

在当下高度复杂的工业生产环境中&#xff0c;机器人如何实现规模化的柔性生产&#xff0c;已成为业界关注的焦点。特别是在追求高效率、高质量的生产过程中&#xff0c;团队协作的重要性愈发凸显。富唯智能一体化AMR控制系统&#xff0c;作为机器人的核心指挥部&#xff0c;犹如…

【MySQL】2. 数据库基础

1. 数据库基础&#xff08;重点&#xff09; 1.1 什么是数据库 存储数据用文件就可以了&#xff0c;为什么还要弄个数据库? 文件保存数据有以下几个缺点&#xff1a; 文件的安全性问题 文件不利于数据查询和管理 文件不利于存储海量数据 文件在程序中控制不方便 数据库存储介…

10.Python从入门到精通—Python 列表,列表脚本操作符,列表截取,列表函数方法

10.Python从入门到精通—Python 列表&#xff0c;列表脚本操作符&#xff0c;列表截取&#xff0c;列表函数&方法 Python 列表(List)Python列表脚本操作符Python列表截取Python列表函数&方法 Python 列表(List) 在 Python 中&#xff0c;列表 (List) 是一种序列类型&am…

Nginx底层基础数据结构

基础数据结构 ngx_int_t 32位操作系统4字节,64位操作系统8字节 解决跨平台以及,普通int类型在x86和x64操作系统上面是4字节,在类型转换时造成内存浪费(如在x64下面转换long类型) typedef intptr_t ngx_int_t;#ifdef _WIN64 typedef __int64 intptr_t; #else typedef _…

【贪心算法】Leetcode 55. 跳跃游戏 45. 跳跃游戏 I

【贪心算法】Leetcode 55. 跳跃游戏 45. 跳跃游戏 II Leetcode 55. 跳跃游戏解法1 贪心 Leetcode 45. 跳跃游戏I解法 贪心 Leetcode 55. 跳跃游戏 ---------------&#x1f388;&#x1f388;55. 跳跃游戏 题目链接&#x1f388;&#x1f388;------------------- 解法1 贪心…

SpringMVC结合设计模式:解决MyBatisPlus传递嵌套JSON数据的难题

&#x1f389;&#x1f389;欢迎光临&#xff0c;终于等到你啦&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;持续更新的专栏《Spring 狂野之旅&#xff1a;从入门到入魔》 &a…

Nginx指令配置大全

基本命令 nginx -t 检查配置文件是否有语法错误 nginx -s reload 热加载&#xff0c;重新加载配置文件 nginx -s stop 快速关闭 nginx -s quit 等待工作进程处理完成后关闭配置块介绍 全局块 全局块是默认配置文件从开始到events块之间的…

蓝桥杯算法练习系统—作物杂交【第十一届】【省赛】【C组】

问题描述 作物杂交是作物栽培中重要的一步。已知有 N 种作物(编号 1 至 N )&#xff0c;第 i 种作物从播种到成熟的时间为 Ti。 作物之间两两可以进行杂交&#xff0c;杂交时间取两种中时间较长的一方。如作物 A 种植时间为 5 天&#xff0c;作物 B 种植时间为 7 天&#xff0…

Spark杂谈

文章目录 什么是Spark对比HadoopSpark应用场景Spark数据处理流程什么是RDDSpark架构相关进程入门案例&#xff1a;统计单词数量Spark开启historyServer 什么是Spark Spark是一个用于大规模数据处理的统一计算引擎Spark一个重要的特性就是基于内存计算&#xff0c;从而它的速度…

[C++提高编程](一):模板----函数模板

目录 函数模板作用 函数模板的语法 注意事项 普通函数与函数模板的区别 普通函数与函数模板的调用规则 模板的局限性 案例--通用数组选择排序从大到小 模板是C中泛型编程的基础&#xff0c;一个模板就是一个创建类或函数的蓝图或者公式。 函数模板作用 建立一个通用函…