Skip to content

Commit fea4430

Browse files
authored
Merge pull request #45 from FlipNoteTeam/feat/refresh-token
Fix: 초당 2번 이상의 요청이 올 경우 같은 토큰 발급되는 오류 수정
2 parents f55c3e8 + 50f3a32 commit fea4430

4 files changed

Lines changed: 24 additions & 2 deletions

File tree

src/main/java/project/flipnote/common/security/dto/AuthPrinciple.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public static AuthPrinciple from(project.flipnote.auth.entity.UserAuth account)
2929
}
3030

3131
public static AuthPrinciple from(Claims claims) {
32-
long authId = Long.parseLong(claims.getId());
32+
long authId = claims.get(JwtConstants.AUTH_ID, Long.class);
3333
long userId = claims.get(JwtConstants.USER_ID, Long.class);
3434
AccountRole userRole = AccountRole.from(
3535
claims.get(JwtConstants.ROLE, String.class)

src/main/java/project/flipnote/common/security/jwt/JwtComponent.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,23 @@
1212
import io.jsonwebtoken.security.Keys;
1313
import jakarta.annotation.PostConstruct;
1414
import lombok.RequiredArgsConstructor;
15+
import lombok.extern.slf4j.Slf4j;
1516
import project.flipnote.auth.entity.UserAuth;
1617
import project.flipnote.auth.model.TokenPair;
1718
import project.flipnote.auth.service.TokenVersionService;
1819
import project.flipnote.common.security.dto.AuthPrinciple;
1920
import project.flipnote.common.security.exception.CustomSecurityException;
2021
import project.flipnote.common.security.exception.SecurityErrorCode;
2122

23+
@Slf4j
2224
@RequiredArgsConstructor
2325
@Component
2426
public class JwtComponent {
2527

2628
private final JwtProperties jwtProperties;
2729
private final TokenVersionService tokenVersionService;
30+
private final TokenIdGenerator tokenIdGenerator;
31+
2832
private SecretKey secretKey;
2933

3034
@PostConstruct
@@ -63,7 +67,8 @@ private String generateToken(AuthPrinciple userAuth, Date expiration) {
6367

6468
return Jwts.builder()
6569
.subject(userAuth.email())
66-
.id(String.valueOf(userAuth.authId()))
70+
.id(tokenIdGenerator.generate())
71+
.claim(JwtConstants.AUTH_ID, userAuth.authId())
6772
.claim(JwtConstants.USER_ID, userAuth.userId())
6873
.claim(JwtConstants.ROLE, userAuth.role().name())
6974
.claim(JwtConstants.TOKEN_VERSION, userAuth.tokenVersion())

src/main/java/project/flipnote/common/security/jwt/JwtConstants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ public final class JwtConstants {
1010

1111
public static final String ROLE = "role";
1212
public static final String TOKEN_VERSION = "token_version";
13+
public static final String AUTH_ID = "auth_id";
1314
public static final String USER_ID = "user_id";
1415

1516
public static final String AUTH_HEADER = "Authorization";
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package project.flipnote.common.security.jwt;
2+
3+
import java.security.SecureRandom;
4+
5+
import org.springframework.stereotype.Component;
6+
7+
@Component
8+
public class TokenIdGenerator {
9+
10+
private final SecureRandom random = new SecureRandom();
11+
12+
public String generate() {
13+
long value = Math.abs(random.nextLong());
14+
return Long.toString(value);
15+
}
16+
}

0 commit comments

Comments
 (0)