您当前的位置: 首页 > 

java持续实践

暂无认证

  • 2浏览

    0关注

    746博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

黑马十次方项目day06-09之token设置过期时间

java持续实践 发布时间:2019-02-13 20:15:27 ,浏览量:2

文章目录
      • 生成token设置过期时间
      • 解析token
      • token过期时的报错

生成token设置过期时间
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;

/**
 * 类名称:CreateJwt
 * 类描述:生成token的测试类
 *
 * @author: taohongchao
 * 创建时间:2019/2/13 19:26
 * Version 1.0
 */
public class CreateJwt {

    public static void main(String[] args){
        JwtBuilder jwtBuilder = Jwts.builder()
                .setId("666")  //登录用户的id
                .setSubject("小马")  //登录用户的名称
                .setIssuedAt(new Date()) //用户登录的时间
                .signWith(SignatureAlgorithm.HS256,"itcast")//头部信息 第一个参数为加密方式为哈希 256  第二个参数为加的盐为itcast
                .setExpiration(new Date(new Date().getTime()+60000)); //设置token 的过期时间为一分钟

        System.out.println(jwtBuilder.compact());
    }
}

只需在原有的生成 token 的地方, 加上一个方法为setExpiration,代表生成token的过期时间. 这里设置的是一分钟. 运行该main方法, 生成的token如下 eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI2NjYiLCJzdWIiOiLlsI_pqawiLCJpYXQiOjE1NTAwNTk5MjAsImV4cCI6MTU1MDA1OTk4MH0.buu_7MM4KCU3nZJNGrzwQD2V0X0QGL51K7dfeZ9JCLU

解析token
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;

import java.text.SimpleDateFormat;

/**
 * 类名称:ParseJwtTest
 * 类描述:TODO
 *
 * @author: taohongchao
 * 创建时间:2019/2/13 19:48
 * Version 1.0
 */
public class ParseJwtTest {

    public static void main(String[] args){
        Claims claims = Jwts.parser().setSigningKey("itcast") //指定
                .parseClaimsJws("eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI2NjYiLCJzdWIiOiLlsI_pqawiLCJpYXQiOjE1NTAwNTk5MjAsImV4cCI6MTU1MDA1OTk4MH0.buu_7MM4KCU3nZJNGrzwQD2V0X0QGL51K7dfeZ9JCLU")
                .getBody();

        System.out.println("用户的id: "+claims.getId());
        System.out.println("用户名: "+claims.getSubject());
        System.out.println("登录时间: "+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(claims.getIssuedAt()));
        System.out.println("过期时间: "+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(claims.getExpiration()));
    }

}

运行该main方法, 得到的结果如下

token过期时的报错

当该token过期时,直接报错,因此在实际项目中,需要把解析token进行try catch 报错如下

Exception in thread "main" io.jsonwebtoken.ExpiredJwtException: JWT expired at 2019-02-13T20:13:00+0800. Current time: 2019-02-13T20:14:55+0800
	at io.jsonwebtoken.impl.DefaultJwtParser.parse(DefaultJwtParser.java:365)
	at io.jsonwebtoken.impl.DefaultJwtParser.parse(DefaultJwtParser.java:458)
	at io.jsonwebtoken.impl.DefaultJwtParser.parseClaimsJws(DefaultJwtParser.java:518)
	at com.tensequare.jwt.ParseJwtTest.main(ParseJwtTest.java:20)

关注
打赏
1658054974
查看更多评论
立即登录/注册

微信扫码登录

0.0385s