现象:无法访问knife4j接口文档地址:
后端控制台报有knife4j报错信息
点击进入报错行:
进入到BasicFilter类,decodeBase64方法
报错行定位在:
return decodeStr;中decodeStr为null
分析方法发现source字符串无法进行Base64.getDecoder()解码,解码失败导致decodeStr为null,导致了这个报错。
从BasicFilter可知,这是小刀的Basic用户账号密码登录模块,这个过程需要用户在浏览器弹出框输入账号密码,验证通过方可进入接口文档
初步可以看出是登录时输入密码,对密码进行Base64解码失败
再想想,我输入/doc.html后都没有看到过用户名,密码弹窗;
是不是我很久之前输入过错误的密码被浏览器缓存记住了呢?删除浏览器缓存再试试还是不行;
或者换个新的不常用的浏览器打开/doc.html试试,发现新浏览器能正常弹出账号密码弹窗,输入账号密码后正常打开了接口文档
换个浏览器就行,肯定是常用浏览器有问题,再细想,两个区别的区别仅仅是常用浏览器用了谷歌浏览器header辅助插件。
把辅助插件关掉,果然正常了
认真一看,
果然生效的header和source字符串的值是一致的,果然就是这里header设置用于自己本项目代码鉴权的Key与小刀的鉴权key重名了,导致互相影响到了。