import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;
import lombok.extern.slf4j.Slf4j;
import org.joda.time.DateTime;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@Slf4j
public class JWT {
public static String generateToken(Map<String, Object> claims) {
Date exp = DateTime.now().plusDays(1).toDate();
return Jwts.builder()
.claim("user_id", 1)
.claim("username", "jack")
.setExpiration(exp)
.signWith(Keys.secretKeyFor(SignatureAlgorithm.HS256))
.compact();
}
public static Claims getClaimsFromToken(String token) {
Claims claims;
try {
claims = Jwts.parser()
.setSigningKey(Keys.secretKeyFor(SignatureAlgorithm.HS256))
.parseClaimsJws(token)
.getBody();
} catch (Exception e) {
log.info("不能相信签名: {}", e);
claims = null;
}
return claims;
}
public static void main(String[] args) {
Map<String,Object> map = new HashMap<>();
String token = JWT.generateToken(map);
log.info("这个是加密出来的token: {}", token);
Claims claims = getClaimsFromToken(token);
log.info("这个是解密出来的claims: {}", claims);
}
}
在学习JWT的时候, 采用io.jsonwebtoken的类库去实现, 可总是验证失败
不知道为什么
楼主没有生成签名的时候和解密的时候key有问题,下边我测试过没有问题:
最终打印:
pom.xml中引用的jar