【发布时间】:2015-06-26 23:19:31
【问题描述】:
我尝试使用 jjwt library 在 Java 中创建 Json Web Token
但是当我尝试延长过期时间时遇到问题。
我用下面的代码试试。
public class Main {
public static void main(String args[]) {
byte[] key = new byte[64];
new SecureRandom().nextBytes(key);
Date date = new Date();
long t = date.getTime();
Date expirationTime = new Date(t + 5000l); // set 5 seconds
String compact = Jwts.builder().setSubject("Joe").setExpiration(expirationTime).signWith(SignatureAlgorithm.HS256, key).compact();
System.out.println("compact : " + compact);
try {
String unpack = Jwts.parser().setSigningKey(key).parseClaimsJws(compact).getBody().getSubject();
System.out.println("unpackage 0 : " + unpack);
// check if the expiration work.
Thread.sleep(3000);
System.out.println("unpackage 1 : " + Jwts.parser().setSigningKey(key).parseClaimsJws(compact).getBody().getSubject());
//extend the expration time.
Date date1 = new Date();
long t1 = date1.getTime();
Date expirationTime1 = new Date(t1 + 5000l); //prolongation 5 seconds
Jwts.parser().setSigningKey(key).parseClaimsJws(compact).getBody().setExpiration(expirationTime1).getSubject();
// check if the extend expiration work.
Thread.sleep(3000);
System.out.println("unpackage 2 : " + Jwts.parser().setSigningKey(key).parseClaimsJws(compact).getBody().getSubject());
} catch (InterruptedException | ExpiredJwtException ex) {
System.out.println("exception : " + ex.getMessage());
Thread.currentThread().interrupt();
}
}
结果是:
紧凑型:eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJKb2UiLCJleHAiOjE0Mjk2NjU1MjB9.oMY2mDHvNoMZqBfic41LbiKvAyi93wIfu_WgIADb9Wc 解包 0:乔 解包1:乔 例外:JWT 于 2015-04-22T08:18:40+0700 过期。当前时间:2015-04-22T08:18:42+0700也就是说,unpackage2 不能运行,因为已经过期了。
我试图延长过期时间。
因为我将代码应用到网络应用程序上。
如果用户仍然连接到我的应用程序,他不应该得到令牌超时。
我找到了和我一样的another question。
【问题讨论】:
-
我将您的代码复制并粘贴到单元测试中,并针对 JJWT 0.3 和 0.4 运行它,但无法重现您遇到的问题。可以在运行时粘贴代码的输出吗?