当前位置: 首页 > article >正文

令牌主动失效机制实现——Redis登录优化

令牌主动失效机制

令牌主动失效机制是一种安全措施,旨在防止令牌(如访问令牌、会话令牌等)在被泄露或不再需要时继续被使用。这种机制通过在特定条件下主动使令牌失效,从而增强系统的安全性

令牌主动失效机制的具体原理

● 登录成功后,给浏览器响应令牌的同时,把该令牌存储到redis中
● LoginInterceptor拦截器中,需要验证浏览器携带的令牌,并同时需要获取到redis中存储的与之相同的令牌
● 当用户修改密码成功后,删除redis中存储的旧令牌

具体实现

登录生成token的controller层

......
// 在登录的controller层生成token之后把token添加到redis内
String token = JwtUtil.createJWT(
                jwtProperties.getAdminSecretKey(),
                jwtProperties.getAdminTtl(),
                claims);
        // 添加token到redis内同时设置过期时间
        redisTemplate.opsForValue().set("token", token, 2,TimeUnit.HOURS);
......

拦截器内解析并查看是否存在对应的token

//1、从请求头中获取令牌
        String token = request.getHeader(jwtProperties.getAdminTokenName());

        //2、校验令牌
        try {

            log.info("jwt校验:{}", token);
            Claims claims = JwtUtil.parseJWT(jwtProperties.getAdminSecretKey(), token);
            Long empId = Long.valueOf(claims.get(JwtClaimsConstant.EMP_ID).toString());
            log.info("当前员工id:", empId);
            if(!redisTemplate.hasKey(empId+"_token")){
                throw new RuntimeException();
            }
            // 将id存入ThreadLocal
            BaseContext.setCurrentId(empId);
            //3、通过,放行
            return true;
        } catch (Exception ex) {
            //4、不通过,响应401状态码
            response.setStatus(401);
            return false;
        }
    }

退出登录或者修改密码时清空token缓存 

@ApiOperation(value = "员工退出")
    @PostMapping("/logout")
    public Result<String> logout() {
        redisTemplate.delete(BaseContext.getCurrentId() + "_token");
        return Result.success();
    }


http://www.kler.cn/a/510373.html

相关文章:

  • ASP.NET Core中 JWT 实现无感刷新Token
  • Word2Vec中的CBOW模型训练原理详细解析
  • docker 基础语法学习,K8s基础语法学习,零基础学习
  • 多个页面一张SQL表,前端放入type类型
  • 适配器模式详解:解决接口不兼容问题的灵活设计模式
  • CV 图像处理基础笔记大全(超全版哦~)!!!
  • 基于 WEB 开发的房屋中介租赁销售系统设计与实现
  • Unity中实现伤害跳字效果(简单好抄)
  • springboot基于微信小程序的智慧乡村政务服务系统
  • 大数据治理:提升数据质量与合规性,助力企业数字化转型
  • 【Linux系统编程】—— 深入理解Linux进程优先级与调度机制
  • Python数据分析案例70——基于神经网络的时间序列预测(滞后性的效果,预测中存在的问题)
  • 3D 视觉语言推理中的态势感知
  • “提升大语言模型推理与规划能力的策略:思维链提示与由少至多提示”
  • 数据库基础练习1(创建表,设置外键,检查,不为空,主键等约束)安装mysql详细步骤
  • ROS通信机制全解析
  • 免签支付工具分享
  • Redis延迟队列详解
  • Mysql InnoDB B+Tree是什么?
  • Spring Boot 3.4.x 和 Micrometer 2.0 的结合 案例 以及使用方法
  • Git下载安装
  • C# 中的 HashSet<T>
  • Java调用C/C++那些事(JNI)
  • 【算法】算法基础课模板大全——第二篇
  • 各种获取数据接口
  • 基于python的财务数据分析与可视化设计与实现