redis6版本及以上使用了acl认证 就是通过账号密码去认证,但是在之前版本都是只需要密码的,这种如果要适配,可能就要升级jedis客户端依赖的,但是一些老项目都不能随便升级的 之前的代码可能就不适配了
如果就要考虑使用现有的jedis版本 如:2.9.0 去支撑redis6的连接 以下有两种方式
第一种:可以不修改任何配置
根据redis官网说的, 如果没有账号的话,redis默认就用 用户名“default” 那么只要redis那边配置一个 用户名:default 密码:xxxx 的这个账号连接 ,那么我们就可以使用现有的方式(不用用户名)去连接了
官网地址:https://redis.com.cn/commands/auth.html
第二种,需要源代码
在不改造任何版本框架版本的场景下,仅仅进行使用适配的模型和能力进行实现用户名和密码的登陆方式。其中就要用到一个原则就是项目目录与jar包中的文件相同的全限定名的时候,会优先采用项目目录中的类进行加载,从而我们就获得了进行覆盖jedis源码的能力。
我们将整个BinaryClient全部拷贝出来,放到我们的项目里面,并且包名必须为:redis.clients.jedis。
public void auth(String password) {setPassword(password);sendCommand(AUTH, password);}
把代码修改为
public void auth( String password) {String userName = RedisUserName.getRedisUserName();if(StringUtils.isNotBlank(userName)){setPassword(password);sendCommand(Command.AUTH,userName, password);}else {setPassword(password);sendCommand(Command.AUTH, password);}}
其中
RedisUserName.getRedisUserName()
这个是获取配置文件的设置的redis username的值,但是因为一个是配置文件获取,一个是静态方法使用里面使用 ,我这里也没有太好的办法 所以就不写了,大家根据自己的来
但是我用的是根据这个方式,仅供参考:https://www.cnblogs.com/pxblog/p/15065785.html 先注入,然后通过这个获取注入的bean的值