实现登录验证——token&redis

本文介绍了如何在SpringBoot应用中实现基于token的登录验证,使用Redis存储token,详细阐述了Redis数据库的配置与使用,token的生成以及登录验证的实现过程,包括DAO、Service和Web层的交互,最后提到了基于Session的传统登录验证方式。
摘要由CSDN通过智能技术生成

基于token的登录验证

token(令牌)

  • 原理:
    在这里插入图片描述

  • 登录流程:
    在这里插入图片描述

  • 访问流程:
    在这里插入图片描述

实现

下述代码的实现基于springboot
用户数据主要存储在mysql数据库的user表中
dao层使用了springdata jpa

1. Redis数据库 存储token

登录的信息仅需一个key-value,如果直接使用关系型数据库进行存储,则需要再建一个数据库表。而redis是非关系型数据库,本身就支持简单的key-value类型的数据。再加上,如果数据库挂了或关闭了,里面的数据都会被自动序列化到本地文件中。

  • 创建redis容器

    docker pull redis
    docker run -di --name=redis -p 6379:6379 redis
    #或
    docker run -di --name=redis -net=host redis
    #将容器的所有端口映射到宿主机中对应的端口
    
  • 测试
    进入redis容器

    docker exec -it redis /bin/bash
    

    使用redis提供的客户端(redis-cli)登录redis,该客户端所在路径是/usr/local/bin

    cd /usr/local/bin
    #启动,-h后面跟的是redis所在服务器的ip
    redis-cli -h 127.0.0.1 -p 6379
    #也可以直接写redis-cli,它默认连接本机的端口为6379的redis
    

    输入命令:ping,返回pong则代表连接redis成功

  • 基本使用
    redis默认有16个数据库,默认为0号数据库,每一个数据库都是独立的相互不影响。

    #切换数据库(切换为1号数据库)
    select 1
    #存储数据
    set key "value"
    set key value
    #获取数据
    get key 
    #删除数据
    del key
    
  • 代码实现

    • 项目中导入redis客户端依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
      
    • 配置redis(配置文件application.properties/application.yml)

      spring.redis.database:0  #redis的0号数据库
      spring.redis.host:redis所在的ip
      spring.redis.port:6379 #redis端口号默认6379
      
    • 测试

      //注入redis客户端
      @Autowired
      private StringRedisTemplate redisTemplate;
      void test() {
             
      	//添加key为name,value为lisi的数据,该数据6秒后过期
      	/**
      	*	参数1:key值
      	*	参数2:value值
      	*	参数3:过期时间
      	*	参数4:时间单位
      	*/
      	redisTemplate.opsForValue().set("name","lisi",6, TimeUnit.SECONDS);
      	//从数据库中获取对应key的value
      	String value = redisTemplate.opsForValue().get("name");
       	System.out.println(value);
       	
      	Thread.sleep(6_000);
      	value = redisTemplate.opsForValue().get("name");
      	System.out.println<
  • 5
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值