文章目录
生成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
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进行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)