Прежде всего, не используйте DefaultClaims
непосредственно в вашем коде. Именно из артефакта jjwt-impl
должен быть доступен только во время выполнения . Цитирование документации :
JJWT гарантирует семантическую совместимость версий для всех своих артефактов, кроме jjwt-impl.jar
. На jjwt-impl.jar
такая гарантия не предоставляется, и внутренние изменения в этом .jar
могут произойти в любое время. Никогда не добавляйте jjwt-impl.jar
в свой проект с compile
scope - всегда объявляйте его с runtime
scope.
Вы можете просто сделать следующее с Jwts.builder()
:
String jws = Jwts.builder()
.setIssuer("mycompany")
.setExpiration(Date.from(OffsetDateTime.now().plus(60, DAYS).toInstant()))
.claim("admin", "true")
.signWith(key)
.compact();
Jws<Claims> jwsClaims = Jwts.parser()
.requireIssuer("mycompany")
.require("admin", "true")
.setSigningKey(key)
.parseClaimsJws(jws);
В качестве альтернативы DefaultClaims
вы можете использовать Map<String, Object>
для хранения любых дополнительных требований, как показано ниже:
Map<String, Object> claims = ImmutableMap.of("admin", "true");
String jws = Jwts.builder()
.setIssuer("mycompany")
.setExpiration(Date.from(OffsetDateTime.now().plus(60, DAYS).toInstant()))
.addClaims(claims) // See the notes below
.signWith(key)
.compact();
Jws<Claims> jwsClaims = Jwts.parser()
.requireIssuer("mycompany")
.require("admin", "true")
.setSigningKey(key)
.parseClaimsJws(jws);
Имейте в виду, я использую addClaims()
, а не setClaims()
:
addClaims()
: добавит указанные претензии к претензиям, уже присутствующим в токене.
setClaims()
: заменит существующие претензии на указанные.