zoukankan      html  css  js  c++  java
  • redis密码验证

    前言

    redis在生产环境中通常都会设置密码以保证一定的安全性,本篇blog就简单记录一下如何在redis中设置客户端登录密码。

    修改redis.conf

    说明:暂时没有测试,一般自己的电脑安装中使用没有用到密码。

    打开redis.conf文件,搜索requirepass关键字,如下图: 
    这里写图片描述

    关注标记的那一行,#requirepass foobared。设置密码的方法就是去掉注释的#,把foobared替换成自己的密码即可,例如将密码设置为123456: 
    这里写图片描述

    修改完成后重启redis,再次通过redis客户端redis-cli登录并操作可以发现会报一个身份认证错误: 
    这里写图片描述

    这就说明我们已经成功的设置了密码,所以通过客户端连接的话必须加上密码参数才能正常连接: 
    这里写图片描述

    如上图所示,加了-a参数之后即可正常连接并操作redis。

    jedis设置密码

    当我们用Java客户端连接redis时会遇到同样的问题,下面看一段简单的jedis连接redis的测试代码:

    package com.firstelite.test;
      
    import org.junit.Test;
    import redis.clients.jedis.Jedis;
         
    public class Test4Jedis {
         
        @Test
        public void testTwo() {
            Jedis jedis = new Jedis("192.168.145.10");
            System.out.println("Connection to server sucessfully");
            // 查看服务是否运行
            System.out.println("Server is running: " + jedis.ping());
        }  
    }

    非常简单,仅仅是测试一下Jedis是否连通redis服务器,运行junit后我们发现报异常了:

    redis.clients.jedis.exceptions.JedisDataException: NOAUTH Authentication required.
    at redis.clients.jedis.Protocol.processError(Protocol.java:117)
    at redis.clients.jedis.Protocol.process(Protocol.java:142)
    at redis.clients.jedis.Protocol.read(Protocol.java:196)
    at redis.clients.jedis.Connection.readProtocolWithCheckingBroken(Connection.java:288)
    at redis.clients.jedis.Connection.getStatusCodeReply(Connection.java:187)
    at redis.clients.jedis.BinaryJedis.ping(BinaryJedis.java:109)
    at com.firstelite.test.Test4Jedis.testTwo(Test4Jedis.java:15)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
    at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

    显而易见,由于我们设置了密码但在这里又没有指定密码,所以报了和刚才相同的错误,那么如何指定密码呢?很简单,Jedis的父类BinaryJedis提供了这样一样方法:

    1. public String auth(final String password) {
    2. checkIsInMulti();
    3. client.auth(password);
    4. return client.getStatusCodeReply();
    5. }

    所以在创建了Jedis的实例后再加上一行jedis.auth("123456"); 即可,最后看一下运行结果: 
    这里写图片描述

    spring-data-redis设置密码

    通常情况下在实际的java项目中我们会选择Spring提供的spring-data-redis来操作redis,spring的封装可以给我们提供很多便捷之处。那么spring-data-redis又是如何设置密码的呢?首先定义一个redis.properties配置文件,定义一组redis属性供spring加载使用,其中就包含密码(redis.password):

    # Redis settings
    redis.host=192.168.145.10
    redis.port=6379
    redis.password=123456
    redis.timeout=100000
    redis.maxTotal=300
    redis.maxIdle=100
    redis.maxWaitMillis=1000
    redis.testOnBorrow=true
    
    boot2.#
    spring.redis.host=192.168.81.129
    spring.redis.port=6379
    spring.redis.password=123456

    然后在由Spring封装的JedisConnectionFactory中来设置密码属性即可,下面是完整redis配置:

    <!-- redis配置 -->
    <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxIdle" value="${redis.maxIdle}" />
        <property name="maxWaitMillis" value="${redis.maxWaitMillis}" />
        <property name="testOnBorrow" value="${redis.testOnBorrow}" />
    </bean>
    <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
        p:host-name="${redis.host}" p:port="${redis.port}" p:password="${redis.password}" p:pool-config-ref="poolConfig" />
        <bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">
            <property name="connectionFactory" ref="connectionFactory" />
      </bean>
    </bean

    出处: https://blog.csdn.net/crazy__qu/article/details/78738264

  • 相关阅读:
    .NET Core依赖注入集成Dynamic Proxy
    MediatR-进程内的消息通信框架
    03-EF Core笔记之查询数据
    02-EF Core笔记之保存数据
    01-EF Core笔记之创建模型
    EF Core 基础知识
    CQRS+ES项目解析-Equinox
    CQRS+ES项目解析-Diary.CQRS
    不要让事实妨碍好故事:Facebook精准广告产品与硅谷创业揭秘,4星奇书《混乱的猴子》
    会讲故事的前物理学家万维钢解读、推荐过的书24本,好书一半
  • 原文地址:https://www.cnblogs.com/But-you/p/11506255.html
Copyright © 2011-2022 走看看