К сожалению, вы не предоставили никакой информации о библиотеке, которую вы используете для генерации Key
. По API, я думаю, это этот ?
Как написано в do c, вы можете понять, почему вы получаете еще один ключ каждый раз, когда запускаете свой test.
Под капотом JJWT использует KeyGenerator поставщика JCA для создания безопасного случайного ключа с правильной минимальной длиной для данного алгоритма.
Итак, это нормальное поведение библиотеки для генерации нового случайного Key
каждый раз, когда вызывается Keys.secretKeyFor
.
Помимо этой общей информации существует также решение вашей проблемы:
Если вам нужно сохранить этот новый SecretKey, вы можете кодировать его в Base64 (или Base64URL):
String secretString = Encoders.BASE64.encode(key.getEncoded());
Если вы хотите использовать один и тот же Key
при каждом запуске тестов, вам следует десериализовать та же строка Base64 перед каждым тестом. Для десериализации вы можете использовать Base64Decoder
и передать byte[]
в SecretKey.hmacShaKeyFor
-Method. Ваш код должен выглядеть примерно так.
byte[] decodedKey = Decoders.BASE64.decode("Your_Base64_key");
SecretKey key = SecretKey.hmacShaKeyFor(decodedKey);
Я бы посоветовал вам сохранить кодированный в Base64 Secret
в папке ресурсов вашего тестового источника root.
Также я бы порекомендовал вам передать текущую дату в ваш isExpired
-Метод, потому что в противном случае ваши тесты зависят от текущего времени системы. Вы должны попытаться исключить все динамические c вещи в своем модульном тесте. В противном случае они станут хрупкими и начнут «случайным образом» выходить из строя.