分布式微服务专栏006(springboot集成Redis实现Token)

欢迎大家加入我的github项目,一起学习,一起发展
---> 全栈工程师进阶学习站
---> 我的前端学习笔记
--->行业内最新最群的报告,工作日每日更新

—>原生 js 训练计划

SpringBoot集成Redis实现Token

项目地址

https://github.com/xunyegege/Backend_development/tree/master/dubbo_ji

灵魂画手上线

image-20190927190908783

⭐️基于SessionID的Token

(1).登录功能

Service层代码

 //登录验证
    @Override
    public Users find(String name, String password) {
        //从mybatis中获取用户信息(数据库表字段设置为not null)
        Users user = userMapper.findAllByName(name);
       
        //匹配验证
        if (null !=user){
            if (password.equals(user.getPassword())){
                return user;
            }
        }
      //验证失败
        return null;
    }

Controller层代码

    @ApiOperation(value = "登录")
    @GetMapping(value = "/login")
    public String login(@ApiParam(value = "账户名", required = true) @RequestParam(value = "name") String name,
                        @ApiParam(value = "密码", required = true) @RequestParam(value = "password") String password,
                        HttpServletRequest request) {
        
        //设置redis最终set的状态
        boolean result = false;
        
        //获取session
        String token = request.getSession().getId();
        
        //调用service层验证方法
        Users users = userService.find(name, password);
        
        //对service层返回的数据进行空值检验
        if (null != users) {

            //如果不是空值,则将该数据用fastjson转换成字符串
            String jsonString = JSONObject.toJSONString(users);
            
            //将token作为key,jsonString作为value存入redis//并返回boolean类型
            result = redisUtils.set(token, jsonString);

        }
        
        //如果存redis返回的是true,则将token传给前端,以表明登陆成功
        if (result) {
            return token;
        }
        //登录失败,返回空
        return null;
    }

(2)刷新校验功能

Controller层代码(只在该层调用redis实现)

 @ApiOperation(value = "校验")
    @GetMapping(value = "/check")
    public String check(@ApiParam(value = "token", required = true) @RequestParam(value = "token") String token) {

        //通过前端传来的token作为key去redis中拿取数据
        String value = (String) redisUtils.get(token);

        //如果有数据,则返回该数据
        if (null != value) {
            return value;
        }
        //没数据,则返回空
        return null;
    }

(3)退出登录功能

Controller层代码

只要在redis中把该用户的sessionID删掉就行了

  @ApiOperation(value = " 退出登录")
    @GetMapping(value = "/exit")
    public boolean exit(@ApiParam(value = "退出登录", required = true) @RequestParam(value = "token") String token) {
        
        //从redis中删除该token
        redisUtils.del(token);

        return true;

    }

(4)注册功能

业务逻辑

1️⃣获取用户名,密码(手机号,邮箱等)

2️⃣从redis中检测用户名是否重复(前端做好密码规范性检测)

3️⃣调用service层接口实现存入数据库操作

4️⃣往redis中存入该用户的注册信息,为下一次用户名重复性检测做好准备

5️⃣返回前端注册成功与否的信息

Controller层代码

@ApiOperation("注册")
    @PostMapping(value = "/register")
    public String register(@Valid UserVo userVo) {
        //redis命名空间
        String nameSpace = "USER_REGISTER_NAME:";
        
        Object object = redisUtils.get(nameSpace + userVo.getName());
        //用户名不重复,存入数据库
        if (null == object) {
          //Vo对象转换成Dto对象
            Users users = new Users();
            users.setName(userVo.getName());
            users.setPassword(userVo.getPassword());
            users.setbTime(new Date());
           
            try {
              //调用service层插库操作
                userService.register(users);
                //存入redis
                redisUtils.set(nameSpace + userVo.getName(), 1);
                return "success";
            }
            catch (Exception e) {
                e.printStackTrace();
            }

        } else {
            return "用户名已被注册";
        }
        return "注册失败";
    }

(5)删除用户

业务逻辑

1️⃣(这步可加可不加)从redis中检测是否有这个用户

2️⃣从redis中删除该用户的注册信息

3️⃣调用service层的接口,实现从数据库中删除用户的操作

4️⃣返回前端删除成功与否的信息

controller层代码

@ApiOperation(value = "删除用户")
    @PostMapping(value = "/delUser")
    public String delUser(@RequestParam(value = "name") String name) {

        //首先是从redis中判断是否有该用户
        Object obj = redisUtils.get(nameSpace + name);

        if (obj == null) {
            return "没有该用户";
        } else {
            try {
                //然后从redis中删除该用户
                redisUtils.del(nameSpace + name);
                //最后从mybatis中删除用户
                boolean b = userService.deleteUser(name);
                if (b == true) {
                    return "删除成功";
                }
            }
            catch (Exception e) {
                e.printStackTrace();
            }
        }
        return "删除失败";
    }
闲聊时刻

10年短信公司,互联网100强企业!主营业务:短信(国内和国际)App H5一键免密登录,防薅羊毛接口,图片OCR,空号检测,活跃号检测,人证核验,活体检测,高防ddos攻击等等200多个企业服务接口!需要的联系他13592366783 官方链接:https://zz.253.com/v5.html#/register?uid=1953

自己公司需求 偶然间 用了一家第三方接口供应商,产品应有尽有,很齐全,对接文档非常详细,彼此都很节约时间,主要非常稳定,包括服务方面很给力,有兴趣的博友,可以联系他,算是对合作伙伴的支持了


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值