✏️ 0903
한 달 인턴 - 온보딩 과제
JWT 토큰 유효성 검사 메서드에 대한 테스트 코드를 작성해봤다
public boolean validateToken(String token) {
try {
verifySignature(token);
Claims claims = getUserInfoFromToken(token);
if (claims.getExpiration().before(new Date())) {
throw new CustomException(ErrorEnum.TOKEN_EXPIRATION);
}
return true;
} catch (ExpiredJwtException e) {
throw new CustomException(ErrorEnum.TOKEN_EXPIRATION);
} catch (MalformedJwtException e) {
throw new CustomException(ErrorEnum.INVALID_TOKEN_FORMAT);
} catch (SecurityException e) {
throw new CustomException(ErrorEnum.INVALID_TOKEN_SIGNATURE);
} catch (JwtException e) {
throw new CustomException(ErrorEnum.INVALID_TOKEN);
} catch (IllegalArgumentException e) {
throw new CustomException(ErrorEnum.FALSE_TOKEN);
}
}
미리 토큰을 만들기 위해 setup 하려고 하니까 test용 secretKey 값을 줘야하는데
원래 쓰는 건 .env 파일에 넣어서 재사용하기엔 좀 그래서 새롭게 만들어보는 방법을 찾아봤다
아무렇게나 넣어도 되나 했는데 안되더라 ㄲㅂ (될리가 있니)
cmd 를 활용해 랜덤으로 시크릿키를 생성하는 방법이다
ver.Windows
Windows PowerShell 이라는 프로그램에 들어가서
아래의 코드를 순서대로 넣어주면 위의 사진처럼 만들어준다
$key = New-Object byte[] 64
[System.Security.Cryptography.RandomNumberGenerator]::Create().GetBytes($key)
$base64Key = [System.Convert]::ToBase64String($key)
$base64Key
ver.Lunxs
리눅스 사용을 안해서 사진은 없...을 예정이었는데 예전에 VirtualBox 를 통해 가상머신 만들어둔게 있다...ㅋㅋ
OpenSSL 을 사용해서 아래의 코드를 입력해주면 자동으로 생성해준다
openssl rand -base64 64
테스트 코드 준비 완료!
@ExtendWith(MockitoExtension.class)
class JwtUtilTest {
@InjectMocks
private JwtUtil jwtUtil;
private String secretKey = "pB+EU94ugGpGZeRZh7pPi+aW1Jcv3uE9Zs1y2rBOw3IFJY/1ttMyz3K438sUyzQQdNAluzR3a9x+M0ZRyeuNhw==";
private Key key;
private String token;
@BeforeEach
public void setUp() {
byte[] keyBytes = secretKey.getBytes(StandardCharsets.UTF_8);
key = Keys.hmacShaKeyFor(keyBytes);
jwtUtil.setSECRET_KEY(secretKey);
jwtUtil.init();
token = Jwts.builder()
.setSubject("testUser")
.claim("auth", "USER")
.setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60))
.signWith(key, SignatureAlgorithm.HS256)
.compact();
}
나만 모르는 기능이었나..? ㅜㅜ
'개발 일지 > TIL' 카테고리의 다른 글
[ #50 ] TIL (2) | 2024.06.26 |
---|---|
[ #47 ] TIL (0) | 2024.06.22 |
[ #46 ] TIL (0) | 2024.06.20 |
[ #45 ] TIL (0) | 2024.06.19 |
[ #44 ] TIL (0) | 2024.06.18 |