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的…

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

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

Vulnhub - Symfonos

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

鼎阳SDS6204示波器EPICS IOC的搭建

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

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

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

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

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

【MySQL】2. 数据库基础

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

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. 跳跃游戏 ---------------🎈🎈55. 跳跃游戏 题目链接🎈🎈------------------- 解法1 贪心…

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

🎉🎉欢迎光临,终于等到你啦🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟持续更新的专栏《Spring 狂野之旅:从入门到入魔》 &a…

Spark杂谈

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

LSS (Lift, Splat, Shoot)

项目主页 https://nv-tlabs.github.io/lift-splat-shoot 图1:本文提出一种模型,给定多视角相机数据 (左), 直接在鸟瞰图 (BEV) 坐标系(右)中推理语义。我们展示了车辆分割 (蓝色),可驾驶区域 (橙色) 和车道分割 (绿色) 的结果。然…

C语言项目:数组与函数实践:扫雷游戏

目录 目录: 1.扫雷游戏分析与设计 1.1扫雷游戏的功能说明: 1.1.1使用控制台实现经典扫雷的游戏 1.1.2游戏可以通过菜单实现继续玩或者退出游戏 1.1.3扫雷棋盘是9*9的格子 1.1.4默认随机布置10个雷 1.1.5 可以排查雷 2.扫雷游戏的代码实现 1.遇到的问题…

项目文章|真菌ChIP-seq+RNA-seq解析脱落酸生物合成的调控机制

组蛋白翻译后修饰是表观遗传调控的主要机制之一,已被证明在基因表达的调控中发挥重要作用,参与真菌发育、感染相关的形态发生、环境应激反应、次级代谢产物的生物合成和致病性。我们分享过不少真菌组蛋白修饰的文章,今天接着带来一篇利用ChIP…

Anaconda安装proplot库

看了一下Anaconda中的环境,现在我有4个,其中gee是一个虚拟环境 因此一般在prompt中装库时要先进入其中一个虚拟环境 conda activate geepip install proplot --no-deps下完了之后,发现版本不对应 conda install matplotlib3.4.3

软件开发项目管理/研发项目管理软件:国产EDA工具厂商行芯科技上线奥博思PowerProject项目管理软件平台

国内领先的EDA工具链提供商杭州行芯科技有限公司(以下简称:行芯科技)与北京奥博思软件技术有限公司达成战略合作,奥博思软件将基于PowerProject项目管理系统助力行芯科技实现研发项目的全生命周期管理,提升管理效能&am…

论文阅读:Face Deblurring using Dual Camera Fusion on Mobile Phones

今天介绍一篇发表在 ACM SIGGRAPH 上的文章,是用手机的双摄系统来做人脸去模糊的工作。这也是谷歌计算摄影研究组的工作。 快速运动物体的运动模糊在摄影中是一个一直以来的难题,在手机摄影中也是非常常见的问题,尤其在光照不足,…

jasypt加解密

项目中经常遇到jasypt加解密的配置文件,尤其是项目不是自己创建的时候,压根不知道加密的内容是什么,而配置文件中一般加密的也都是数据库或其他非结构型数据库的账号或密码,这时候想要看一下db的内容就非常的头疼,除了…

【爬虫】– 抓取原创力文档数据

使用RPA工具,实现针对于原创力中不可下载文档的抓取,可延用于其他类似文库 1 使用工具、环境 影刀RPA、WPS Office、谷歌浏览器(非指定) 2 代码流程 3 关键点 此方案只适合抓取非VIP即可预览全文的文档,抓取下来的数…

B007-springcloud alibaba 消息驱动 Rocketmq

目录 MQ简介什么是MQMQ的应用场景异步解耦流量削峰 常见的MQ产品 RocketMQ入门RocketMQ环境搭建环境准备安装RocketMQ启动RocketMQ测试RocketMQ关闭RocketMQ RocketMQ的架构及概念RocketMQ控制台安装 消息发送和接收演示发送消息接收消息 案例订单微服务发送消息用户微服务订阅…