Skip to content

Commit

Permalink
refactor : Token Service에 id로 토큰을 만드는 기능 추가 (#112)
Browse files Browse the repository at this point in the history
  • Loading branch information
binary-ho committed Mar 8, 2024
1 parent 8a9a2b0 commit bd8241e
Showing 1 changed file with 37 additions and 15 deletions.
52 changes: 37 additions & 15 deletions src/main/java/gdsc/binaryho/imhere/security/jwt/TokenService.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package gdsc.binaryho.imhere.security.jwt;

import gdsc.binaryho.imhere.core.member.Role;
import gdsc.binaryho.imhere.util.SeoulDateTimeHolder;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.ExpiredJwtException;
Expand All @@ -20,33 +21,27 @@ public class TokenService {
private final SecretHolder secretHolder;
private final SeoulDateTimeHolder seoulDateTimeHolder;

private static final String ROLE_KEY = "role";
private static final Duration ACCESS_TOKEN_EXPIRATION_TIME = Duration.ofMinutes(30);

// TODO : 기존 토큰 생성 방식은 삭제할 예정
public Token createToken(String univId, String roleKey) {
Claims claims = Jwts.claims().setSubject(univId);
claims.put("role", roleKey);

long seoulTimeNow = seoulDateTimeHolder.getSeoulMilliseconds();

String jwt = Jwts.builder()
.setClaims(claims)
.setIssuedAt(new Date(seoulTimeNow))
.setExpiration(new Date(seoulTimeNow + ACCESS_TOKEN_EXPIRATION_TIME.toMillis()))
.signWith(SignatureAlgorithm.HS256, secretHolder.getSecret())
.compact();
return createToken(claims, roleKey);
}

return new Token(jwt);
public Token createToken(Long id, Role role) {
Claims claims = Jwts.claims().setSubject(id.toString());
return createToken(claims, role.getKey());
}

public boolean validateTokenExpirationTimeNotExpired(String token) {
if (token == null || token.isEmpty()) {
if (isNullOrEmpty(token)) {
return false;
}

try {
Jwts.parser()
.setSigningKey(secretHolder.getSecret())
.parseClaimsJws(token);
parseToValidateToken(token);
return true;
} catch (ExpiredJwtException exception) {
return false;
Expand All @@ -63,4 +58,31 @@ public String getUnivId(String token) {
.getBody()
.getSubject();
}

private Token createToken(Claims claims, String roleKey) {
claims.put(ROLE_KEY, roleKey);

String jwtToken = buildJwtToken(claims);
return new Token(jwtToken);
}

private Boolean isNullOrEmpty(String token) {
return token == null || token.isEmpty();
}

private String buildJwtToken(Claims claims) {
long seoulTimeNow = seoulDateTimeHolder.getSeoulMilliseconds();
return Jwts.builder()
.setClaims(claims)
.setIssuedAt(new Date(seoulTimeNow))
.setExpiration(new Date(seoulTimeNow + ACCESS_TOKEN_EXPIRATION_TIME.toMillis()))
.signWith(SignatureAlgorithm.HS256, secretHolder.getSecret())
.compact();
}

private void parseToValidateToken(String token) {
Jwts.parser()
.setSigningKey(secretHolder.getSecret())
.parseClaimsJws(token);
}
}

0 comments on commit bd8241e

Please sign in to comment.