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

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日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效