📅 2024. 05. 14 104일차
@SpringBootTest
class JwtTests {
@Test
@DisplayName("accessToken을 통해서 claims를 얻을 수 있다.")
void t7() {
Map<String, Object> claims = new HashMap<>();
claims.put("id", 1L);
claims.put("username", "admin");
String accessToken = jwtProvider.genToken(claims, 60 * 60 * 5);
System.out.println("accessToken: " + accessToken);
assertThat(jwtProvider.verify(accessToken)).isTrue();
Map<String, Object> claimsFromToken = jwtProvider.getClaims(accessToken);
System.out.println("claimsFromToken: " + claimsFromToken);
}
}
@Component
public class JwtProvider {
private SecretKey cachedSecretKey;
@Value("${custom.jwt.secretKey}")
private String secretKeyPlain;
private SecretKey _getSecretKey() {
String keyBase64Encoded = Base64.getEncoder().encodeToString(secretKeyPlain.getBytes());
return Keys.hmacShaKeyFor(keyBase64Encoded.getBytes());
}
public SecretKey getSecretKey() {
if (cachedSecretKey == null) cachedSecretKey = _getSecretKey();
return cachedSecretKey;
}
public String genToken(Map<String, Object> claims, int seconds) {
long now = new Date().getTime();
Date accessTokenExpiresIn = new Date(now + 1000L * seconds);
return Jwts.builder()
.claim("body", Ut.json.toStr(claims))
.setExpiration(accessTokenExpiresIn)
.signWith(getSecretKey(), SignatureAlgorithm.HS512)
.compact();
}
@SpringBootTest
class JwtTests {
public boolean verify(String token) {
try {
Jwts.parserBuilder()
.setSigningKey(getSecretKey())
.build()
.parseClaimsJws(token);
} catch (Exception e) {
return false;
}
return true;
}
public Map<String, Object> getClaims(String token) {
String body = Jwts.parserBuilder()
.setSigningKey(getSecretKey())
.build()
.parseClaimsJws(token)
.getBody()
.get("body", String.class);
return Ut.json.toMap(body);
}
}
}
일반사이트 주소체계
REST API 주소체계