wtx0354 2022-04-16 17:03 采纳率: 54.5%
浏览 81
已结题

jwt令牌过期问题,不知道是因为什么问题引起的

自己的jwt代码一直没有动过,但刚才测试后台接口时,测试任何方法都会报出未登录,请登录的提示,但是验证码是可以正常获取的。打开ida的后台显示jwt已过期,但是以前测试时jwt一直没有问题,帮帮忙,个人觉得可能不是jwt问题,因为之前跟着视频做rabbitmq的消费端幂等性运行的时候还好好的,谢谢xd!

这个是测试是的消息:

img

这个是idea的报错:

img

这个是jwtUtil文件内容:

img

img

img

img

这个是JwtAuthenticationTokenFilter的内容:

img

  • 写回答

4条回答 默认 最新

  • 关注

    登录也不行吗?参考:

    @ConfigurationProperties(prefix = "jwt")
    @Component
    public class JwtUtils {
    
        private String secret;
        private long expire;
        private String header;
    
        /**
         * 生成token
         *
         * @param userId
         * @return
         */
        public String createToken(String userId) {
            Date nowDate = new Date();
            //过期时间
            Date expireDate = new Date(nowDate.getTime() + expire * 1000);
            return Jwts.builder()
                    .setHeaderParam("typ", "JWT")
                    .setSubject(userId + "")
                    .setIssuedAt(nowDate)
                    .setExpiration(expireDate)
                    .signWith(SignatureAlgorithm.HS512, secret)
                    .compact();
        }
    
        public Claims getClaimByToken(String token) {
            try {
                return Jwts.parser()
                        .setSigningKey(secret)
                        .parseClaimsJws(token)
                        .getBody();
            } catch (Exception e) {
                return null;
            }
        }
    
        /**
         * 获取token的过期时间
         *
         * @param token token
         * @return 过期时间
         */
        public Date getExpirationDateFromToken(String token) {
            return getClaimByToken(token).getExpiration();
        }
    
        /**
         * 判断token是否过期
         *
         * @param token token
         * @return 已过期返回true,未过期返回false
         */
        public Boolean isTokenExpired(String token) {
            Date expiration = getExpirationDateFromToken(token);
            return expiration.before(new Date());
        }
    
        /**
         * 判断token是否非法
         *
         * @param token token
         * @return 未过期返回true,否则返回false
         */
        public Boolean validateToken(String token) {
            return !isTokenExpired(token);
        }
    
        public String getSecret() {
            return secret;
        }
    
        public void setSecret(String secret) {
            this.secret = secret;
        }
    
        public long getExpire() {
            return expire;
        }
    
        public void setExpire(long expire) {
            this.expire = expire;
        }
    
        public String getHeader() {
            return header;
        }
    
        public void setHeader(String header) {
            this.header = header;
        }
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月25日
  • 已采纳回答 4月17日
  • 创建了问题 4月16日

悬赏问题

  • ¥15 u盘问题:盘符不显示 无媒体
  • ¥50 R语言读取nc按月均值转为tif
  • ¥30 智能车串级pid调参
  • ¥15 visual studio code翻译老是错误
  • ¥20 卫星测高数据的高程转换
  • ¥15 爬取招聘网站数据信息
  • ¥15 安装完tensorflow,import tensorflow as tf后报错,如何解决?
  • ¥15 ultralytics库导出onnx模型,模型失去预测能力
  • ¥15 linux下点对点协议连接2个USB串口的硬件流量控制问题
  • ¥15 SQL数据自动生成问题