public class JwtUtil {
private static Algorithm algorithm;
static {
try {
algorithm = Algorithm.HMAC512(KeyGenerator.getInstance("HmacSHA512").generateKey().getEncoded());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
public static String create(String username) {
Date now = new Date();
return JWT.create()
.withIssuedAt(now)
.withClaim("username", username)
.withExpiresAt(new Date(now.getTime() + 60000*60))
.sign(algorithm);
}
public static String verify(String token) {
return JWT.require(algorithm).build()
.verify(token)
.getClaim("username")
.asString();
}
}
上面是 jwt 的生成和验证的类
public class TestToken {
public static void main(String[] args) {
String token = JwtUtil.create("123");
System.out.println(token);
System.out.println(JwtUtil.verify("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJleHAiOjE1NzM4MTU2MzYsImlhdCI6MTU3MzgxMjAzNiwidXNlcm5hbWUiOiIxMjMifQ.4xIgdDx44A_4vdebICw-FmzxMqw5R48OODJ7HPst4rEe-4k2ob1cKat2CKqw7VSTsKAEBl1abxv6EpBU5AhIwg"));
}
}
问题:当我把获得的 token 手动填入到这个测试类里的时候,就是给我报一个错 com.auth0.jwt.exceptions.SignatureVerificationException: The Token's Signature resulted invalid when verified using the Algorithm: HmacSHA512,但是如果我直接写成JwtUtil.verify(token)
,一切就 ok,请问这是为什么?(手动填入的 token 是正确的,未过期的)
1
shayang888 OP 然后就是如果我把```Algorithm.HMAC512()```这里传入的 secret 改成固定的,那么以上的问题不会出现
|
2
shayang888 OP 有大佬帮忙看看吗 谢谢了 实在不知道哪有问题
|
3
DavidWei 2019-11-15 18:40:06 +08:00
algorithm = Algorithm.HMAC512(KeyGenerator.getInstance("HmacSHA512").generateKey().getEncoded());
|
4
shayang888 OP @DavidWei 这有什么问题吗?
|