分布式Session解决方案_Token + Redis

接上一篇:分布式6大核心专题_分布式Session
https://gblfy.blog.csdn.net/article/details/113802195

实现流程
1.安装redis服务并启动
2.依赖+代码+配置
3.演示同一程序启动8081端口和8082端口模拟2个服务器分布式
4.调用8081登录接口
5.调用8081获取用户信息接口
6.调用8082获取用户信息接口

1. 安装redis服务并启动
docker run -d -p 6379:6379 redis:5
2. 依赖+代码+配置

pom

       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

application.yml


spring:
  redis:
    host: 192.168.0.113 #ip地址
    port: 6379 #端口
    password: #密码
server:
  port: 8081 #应用web端口

案例代码

package com.gblfy.distributed.session.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.*;

import java.util.UUID;
import java.util.concurrent.TimeUnit;

@RequestMapping("/user")
@RestController
public class UserController {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @GetMapping("/loginWithToken")
    public String loginWithToken(@RequestParam String username,
                                 @RequestParam String password) {
        //账号密码正确
        String key = "token_" + UUID.randomUUID().toString();
        stringRedisTemplate.opsForValue().set(key, username, 3600, TimeUnit.SECONDS);
        return key;
    }

    @GetMapping("/infoWithToken")
    public String infoWithToken(@RequestHeader String token) {
        return "当前登录的是:" + stringRedisTemplate.opsForValue().get(token);
    }
}

3. 分别启动8081端口和8082端口

同上一篇

4. 调用8081登录接口
#登录接口
http://localhost:8081/user/loginWithToken?username=admin&password=admin
5. 调用8081获取用户信息接口
#获取用户信息接口
http://localhost:8081/user/infoWithToken?token=登录后的token

注:由于需要在请求header添加token,因此,请使用postman工具测试

6. 调用8082获取用户信息接口
#获取用户信息接口
http://localhost:8082/user/infoWithToken?token=登录后的token

注:由于需要在请求header添加token,因此,请使用postman工具测试

测试结论:可以正常获取用户信息,关闭8081服务器,也是一样的,因为用户信息存放在redis服务端,不在应用本地,除非把redis关闭。

补充:
小伙伴发现,只有登陆成功后,携带token才可以访问其他接口,对吧!但是,每次都要手动填写token是不是很麻烦,其实正常的场景,前端会将登录后的token存放到Local Storage中,访问接口时会携带token,后端也会校验此token是否合法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gblfy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值