Merge branch 'dev/v1.2.0' into feat/renew-with-payload-in-old-token

This commit is contained in:
Zihlu Wang
2023-10-17 13:36:56 +08:00
@@ -22,6 +22,7 @@ import cn.org.codecrafters.guid.GuidCreator;
import cn.org.codecrafters.simplejwt.SecretCreator;
import cn.org.codecrafters.simplejwt.TokenPayload;
import cn.org.codecrafters.simplejwt.TokenResolver;
import cn.org.codecrafters.simplejwt.annotations.ExcludeFromPayload;
import cn.org.codecrafters.simplejwt.constants.TokenAlgorithm;
import cn.org.codecrafters.simplejwt.exceptions.WeakSecretException;
import cn.org.codecrafters.simplejwt.jjwt.config.JjwtTokenResolverConfig;
@@ -38,10 +39,7 @@ import java.security.Key;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
import java.util.Map;
import java.util.Objects;
import java.util.UUID;
import java.util.*;
/**
* The {@link JjwtTokenResolver} class is an implementation of the {@link
@@ -175,7 +173,8 @@ public class JjwtTokenResolver implements TokenResolver<Jws<Claims>> {
this.key = Keys.hmacShaKeyFor(SecretCreator.createSecret(32, true, true, true).getBytes(StandardCharsets.UTF_8));
}
private String buildToken(Duration expireAfter, String audience, String subject, LocalDateTime now, Map<String, Object> claims) {
private String buildToken(Duration expireAfter, String audience, String subject, Map<String, Object> claims) {
var now = LocalDateTime.now();
var builder = Jwts.builder()
.setHeaderParam("typ", "JWT")
.setIssuedAt(Date.from(now.atZone(ZoneId.systemDefault()).toInstant()))
@@ -205,7 +204,7 @@ public class JjwtTokenResolver implements TokenResolver<Jws<Claims>> {
*/
@Override
public String createToken(Duration expireAfter, String audience, String subject) {
return buildToken(expireAfter, audience, subject, LocalDateTime.now(), null);
return buildToken(expireAfter, audience, subject, null);
}
/**
@@ -220,7 +219,7 @@ public class JjwtTokenResolver implements TokenResolver<Jws<Claims>> {
*/
@Override
public String createToken(Duration expireAfter, String audience, String subject, Map<String, Object> payload) {
return buildToken(expireAfter, audience, subject, LocalDateTime.now(), payload);
return buildToken(expireAfter, audience, subject, payload);
}
/**
@@ -238,14 +237,26 @@ public class JjwtTokenResolver implements TokenResolver<Jws<Claims>> {
*/
@Override
public <T extends TokenPayload> String createToken(Duration expireAfter, String audience, String subject, T payload) {
var fields = payload.getClass().getDeclaredFields();
var payloadMap = new HashMap<String, Object>();
for (var field : fields) {
if (field.isAnnotationPresent(ExcludeFromPayload.class))
continue;
try {
var claims = MapUtil.objectToMap(payload);
return buildToken(expireAfter, audience, subject, LocalDateTime.now(), claims);
field.setAccessible(true);
// Build Claims
/*
* Note (17 Oct, 2023): The jjwt can only add a map to be added.
*/
payloadMap.put(field.getName(), field.get(payload));
} catch (IllegalAccessException e) {
log.error("An error occurs while accessing the fields of the object");
log.error("Cannot access field {}!", field.getName());
}
}
return null;
return buildToken(expireAfter, audience, subject, payloadMap);
}
/**