🌏 WEB/JAVA

μ œλ„€λ¦­ DTO

μ• μ •μ“° 2023. 3. 14. 19:15

jwt 토큰 을 μΆ”κ°€ν•˜λŠ” 도쀑 

이미 μ‚¬μš©μ€‘μΈ μ„œλΉ„μŠ€κ°€ μ‚¬μš©ν•˜κ³  μžˆλŠ”κ±Έ μΆ”μƒν™”ν•˜λŠ” μž‘μ—…μ€‘μ— μ œλ„€λ¦­μ„ μ‚¬μš©ν•œ 후기이닀.

 

 

μ„œλΉ„μŠ€ λ§ˆλ‹€ λ‹€λ₯Έ ν† ν°μœ μ§€ μ‹œκ°„, νŽ˜μ΄λ‘œλ“œλ₯Ό κ°–κ³  μžˆλŠ”λ°

μ˜€λ²„λΌμ΄λ”©μ„ μ‚¬μš©ν•˜μ˜€λŠ”λ° μ½”λ“œλ¦¬λ·° λ•Œ 같은 κΈ°λŠ₯을 ν•˜λ©΄μ„œ μ•½κ°„μ˜ ν•„λ“œμΆ”κ°€λ§Œ λ˜λŠ”κ²ƒμ΄λΌμ„œ μ œλ„€λ¦­μ„ μ‚¬μš©ν•΄λ³΄λŠ”κ²Œ μ–΄λ–»λƒλŠ” ν”Όλ“œλ°±μ„ λ°›μ•˜λ‹€. λ¬Όλ‘  처음 μ¨λ³΄λŠ”κ±°λΌμ„œ μ‹œκ°„μ΄ 였래 κ±Έλ Έλ‹€. μž¬λ―Έμžˆμ—ˆκ³  μ‹ μ„Έκ³„μ˜€λ‹€ (μ œλŒ€λ‘œ 쓴것도 μ•„λ‹ˆμ§€λ§Œ)

 

μ•„λž˜μ™€ 같이 μ œλ„€λ¦­ 클래슀λ₯Ό μƒμ„±ν•˜κ³  issue (ν† ν°λ°œν–‰) 을 μ‹€ν–‰ν–ˆμ„ λ•Œ μ œλ„€λ¦­ νƒ€μž…μœΌλ‘œ 생성 ν•˜μ˜€λ‹€

@Data
@AllArgsConstructor
public class TokenPayload<T> {

  private T tokenPayload;

  public T getTokenPayload() {
    return tokenPayload;
  }
}
  @Transactional
  @Override
  public JsonWebTokenDto issue(IssueReqeust request) {
    User user = findByIdAndPwd(request.getId(),request.getPwd());
    TokenPayloadDto payload = getTokenPayloadDto(user);
    return jwtTokenService.generateTokens(new TokenPayload<>(payload));
  }

 

 

전달받은 payload λ₯Ό claim 에 μ €μž₯ν•˜λ €λ©΄ payload.getTokenPayload() 둜 κ°–κ³  였면 λœλ‹€.

그러면 Token 을 μƒμ„±ν•˜λ©΄μ„œ μ•„λž˜μ™€ 같이 이쁘게 λ‚˜μ˜¨λ‹€.

public <T> GeneratedTokenDto createAccessToken(@NotNull TokenPayload<T> payload) {
    // ...
    JwtBuilder jwtBuilder = Jwts.builder()
        .setSubject(subject)
        .claim(Constants.JWT_PRIVATE_CLAIMS_MEMBER_KEY, payload.getTokenPayload())
        .setIssuedAt(issuedAt)
        .setExpiration(expiration).setHeaderParam(Header.TYPE, Header.JWT_TYPE)
        .signWith(SignatureAlgorithm.HS256, accessSecretKeyByte);
    
    // ...
    return GeneratedTokenDto.builder().tokenType(tokenType).subject(subject)
        .issueAt(issuedAt).expiration(expiration).token(jwtBuilder.compact()).build();
  }
{
  "sub": "1",
  "companyMember": {
    "id": 1,
    "branchId": 123,
    "serviceId": 4567
  },
  "iat": 1678784812,
  "exp": 1678785412,
  "role": [
    "ADMIN"
  ]
}
λ°˜μ‘ν˜•