SpringSecurity 退出登录/修改密码/重置密码 使JWT的token失效的解决方案

 

 

利用数据库,存放一个token过期的时间字段  private LocalDateTime expireTime;

用户进行 修改密码、重置密码、退出登录 的操作时   修改数据库中token过期的时间字段 expireTime

 

在创建token时,标注上创建的时间 .setIssuedAt(new Date())。

如果这个创建时间小于 数据库中token过期时间expireTime,就表示它是修改或者登出之前的token,为过期token

 

token创建时间>数据库中的token过期时间  === 抛出异常 token失效 

 

1.设置token的创建时间

2.方法拿到该token的创建时间

   /**
     *  token创建时间
     * @param token
     * @return
     */
    public  Date getCreateTime(String token){
        return getTokenBody(token).getIssuedAt();
    }

 

3.在JWT拦截器中 拿到该用户的信息后   拿到该用户 的token过期时间expireTime,然后与 该token的生成时间做比较,

如果该token生成的时间 在用户修改时间之前  则抛出去异常 。

到此旧的token就失效了  重新登录的时候 会生产新的token  新token的创建时间也会更新  拦截器到这里的时候 

这个创建时间肯定是在 更新时间之后的 自然就放行了。

代码中LocalDateTime 和Date 做了下格式转换 ,如果你定义的实体是Date 类型  直接用before 就可以了。

Date createTime = jwtUtils.getCreateTime(authToken); //token的生成时间
                    LocalDateTime updateTime = jwtUserDto.getUserEntity().getExpireTime();//修改密码/重置密码/退出登录 的时间
                    LocalDateTime createDate = createTime.toInstant().atOffset(ZoneOffset.ofHours(8)).toLocalDateTime();
                    if (null != updateTime) {
                        if (createDate.isBefore(updateTime)) {
                            throw new AccountExpiredException("token已经失效,请重新登录!");
                        }
                    }

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值