From 47eea6e602948f6ef6d2d2e2e4cac8d6124bbbde Mon Sep 17 00:00:00 2001 From: toychip Date: Wed, 29 Nov 2023 15:22:26 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20JwtProvider=20-=20AccessToken=20?= =?UTF-8?q?=EB=B0=9C=EA=B8=89=20method=20(#7)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 5 +++ .../global/constant/OauthConstant.java | 1 + .../api/TaveShot/global/jwt/JwtProvider.java | 45 +++++++++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 src/main/java/com/api/TaveShot/global/jwt/JwtProvider.java diff --git a/build.gradle b/build.gradle index e3df5c6..565227f 100644 --- a/build.gradle +++ b/build.gradle @@ -35,6 +35,11 @@ dependencies { // oauth implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' + + // jwt + implementation 'io.jsonwebtoken:jjwt-api:0.11.5' + runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.5' + runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.5' } tasks.named('bootBuildImage') { diff --git a/src/main/java/com/api/TaveShot/global/constant/OauthConstant.java b/src/main/java/com/api/TaveShot/global/constant/OauthConstant.java index 06f4b13..76d49e4 100644 --- a/src/main/java/com/api/TaveShot/global/constant/OauthConstant.java +++ b/src/main/java/com/api/TaveShot/global/constant/OauthConstant.java @@ -11,5 +11,6 @@ private OauthConstant() { public static final String LOGIN_PATTERN = "login"; public static final String NAME_PATTERN = "name"; public static final String EMAIL_PATTERN = "email"; + public static final long ACCESS_TOKEN_VALID_TIME = 15 * 60 * 1000L; } diff --git a/src/main/java/com/api/TaveShot/global/jwt/JwtProvider.java b/src/main/java/com/api/TaveShot/global/jwt/JwtProvider.java new file mode 100644 index 0000000..abb282d --- /dev/null +++ b/src/main/java/com/api/TaveShot/global/jwt/JwtProvider.java @@ -0,0 +1,45 @@ +package com.api.TaveShot.global.jwt; + +import static com.api.TaveShot.global.constant.OauthConstant.ACCESS_TOKEN_VALID_TIME; + +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; +import io.jsonwebtoken.security.Keys; +import java.nio.charset.StandardCharsets; +import java.util.Date; +import javax.crypto.SecretKey; +import org.springframework.beans.factory.annotation.Value; + +public class JwtProvider { + + @Value("${jwt.secret.key}") + private String SECRET_KEY; + + public String generateAccessToken(String id) { + Claims claims = createClaims(id); + Date now = new Date(); + long expiredDate = calculateExpirationDate(now); + SecretKey secretKey = generateKey(); + + return Jwts.builder() + .setClaims(claims) + .setIssuedAt(now) + .setExpiration(new Date(expiredDate)) + .signWith(secretKey, SignatureAlgorithm.HS256) + .compact(); + } + + private Claims createClaims(String id) { + return Jwts.claims().setSubject(id); + } + + private long calculateExpirationDate(Date now) { + return now.getTime() + ACCESS_TOKEN_VALID_TIME; + } + + private SecretKey generateKey() { + return Keys.hmacShaKeyFor(SECRET_KEY.getBytes(StandardCharsets.UTF_8)); + } + +}