본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
공부 시작 시각 인증

수강 인증 사진

TokenProvider.java
package org.fastcampus.auth.domain;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;
import java.util.Date;
import javax.crypto.SecretKey;
public class TokenProvider {
private final SecretKey key;
private static final long TOKEN_VALID_TIME = 1000L * 60 * 60;
public TokenProvider(String secretKey) {
this.key = Keys.hmacShaKeyFor(secretKey.getBytes());
}
public String createToken(Long userId, String role) {
Claims claims = Jwts.claims()
.subject(userId.toString())
.build();
Date now = new Date();
Date validDate = new Date(now.getTime() + TOKEN_VALID_TIME);
return Jwts.builder()
.claims(claims)
.issuedAt(now)
.expiration(validDate)
.claim("role", role)
.signWith(key)
.compact();
}
public Long getUserId(String token) {
return Long.parseLong(
Jwts.parser()
.verifyWith(key)
.build()
.parseSignedClaims(token)
.getPayload()
.getSubject()
);
}
public String getUserRole(String token) {
return Jwts.parser()
.verifyWith(key)
.build()
.parseSignedClaims(token)
.getPayload()
.get("role", String.class);
}
}
TokenProviderTest.java
package org.fastcampus.auth;
import org.fastcampus.auth.domain.TokenProvider;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class TokenProviderTest {
private final String secretKey = "testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest";
private final TokenProvider tokenProvider = new TokenProvider(secretKey);
@Test
void givenValidUserAndRole_whenCreateToken_thenReturnValidToken() {
// given
Long userId = 1L;
String role = "ADMIN";
// when
String token = tokenProvider.createToken(userId, role);
// then
assertNotNull(token);
assertEquals(userId, tokenProvider.getUserId(token));
assertEquals(role, tokenProvider.getUserRole(token));
}
@Test
void givenInvalidToken_whenGetUserId_thenThrowError() {
// given
String InvalidToken = "invalid-token";
// when, then
assertThrows(Exception.class, () -> tokenProvider.getUserId(InvalidToken));
}
}
학습 인증샷

학습 종료 시각 인증
