PROJECT #3 - TOKEN

김형우·2022년 4월 8일
0

New Project

목록 보기
4/12

0. 라이브러리 설치

<!-- jwt -->
<dependency>
	<groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
</dependency>
<dependency>
	<groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>0.9.1</version>
</dependency>

1. 환경설정

1-1. /jwt/JwtUtil.java

  1. SECURITY_KEY
    : salt값
  2. VALIDATE_TIME
    : 만료시간
package com.example.jwt;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;

import org.springframework.stereotype.Service;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

// 토큰발행 및 정보 추출용
@Service
public class JwtUtil {
    // final은 상수, 변경할수 없음

    // salt값
    private final String SECURITY_KEY = "randomKey#12";

    // 만료시간
    // 1000 => 1초
    // 9H
    private final long VALIDATE_TIME = 1000 * 60 * 60 * 9;

    // 토큰생성
    public String generatorToken(String username) {

        Map<String, Object> map = new HashMap<String, Object>();
        String token = Jwts.builder()
                .setClaims(map)
                .setSubject(username)
                .setIssuedAt(new Date(System.currentTimeMillis()))
                .setExpiration(new Date(System.currentTimeMillis() + VALIDATE_TIME))
                .signWith(SignatureAlgorithm.HS256, SECURITY_KEY)
                .compact();

        return token;
    }

    // 정보 추출용 메소드
    private <T> T extractClaim(String token, Function<Claims, T> claimsResolver) {
        final Claims claims = Jwts.parser().setSigningKey(SECURITY_KEY).parseClaimsJws(token).getBody();
        return claimsResolver.apply(claims);
    }

    // 토큰에서 아이디 추출
    public String extractUsername(String token) {
        return extractClaim(token, Claims::getSubject);
    }

    // 토큰에서 만료시간 추출
    public Date extractExpiration(String token) {
        return extractClaim(token, Claims::getExpiration);
    }

    // 유효시간 체크
    public boolean isTokenExpired(String token) {
        return extractExpiration(token).before(new Date());
    }

    // 토큰이 유효한지 체크
    public boolean isTokenValidation(String token, String uid) {
        String username = extractUsername(token);
        if(username.equals(uid) && isTokenExpired(token)) {
            return true;
        }
        return false;
    }
}

1-2.

profile
The best

0개의 댓글