JWT란?
2020/10/02 - [IT/기타] - [JWT] Json Web Token이란?
1. jjwt란?
jjwt는 JWT 토큰 생성 및 JWT 토큰 파싱, 검증을 해주는 라이브러리 입니다.
2. Maven dependency 추가
...
<dependencies>
...
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
...
</dependencies>
...
3. 예제
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.ExpiredJwtException;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.Jwts;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class TestJWT {
final String key = "Bamdule";
public static void main(String[] args) throws UnsupportedEncodingException {
TestJWT testJWT = new TestJWT();
String jwt = testJWT.createToken();
System.out.println(jwt);
Map<String, Object> claimMap = testJWT.verifyJWT(jwt);
System.out.println(claimMap); // 토큰이 만료되었거나 문제가있으면 null
}
//토큰 생성
public String createToken() {
//Header 부분 설정
Map<String, Object> headers = new HashMap<>();
headers.put("typ", "JWT");
headers.put("alg", "HS256");
//payload 부분 설정
Map<String, Object> payloads = new HashMap<>();
payloads.put("data", "My First JWT !!");
Long expiredTime = 1000 * 60L * 60L * 2L; // 토큰 유효 시간 (2시간)
Date ext = new Date(); // 토큰 만료 시간
ext.setTime(ext.getTime() + expiredTime);
// 토큰 Builder
String jwt = Jwts.builder()
.setHeader(headers) // Headers 설정
.setClaims(payloads) // Claims 설정
.setSubject("user") // 토큰 용도
.setExpiration(ext) // 토큰 만료 시간 설정
.signWith(SignatureAlgorithm.HS256, key.getBytes()) // HS256과 Key로 Sign
.compact(); // 토큰 생성
return jwt;
}
//토큰 검증
public Map<String, Object> verifyJWT(String jwt) throws UnsupportedEncodingException {
Map<String, Object> claimMap = null;
try {
Claims claims = Jwts.parser()
.setSigningKey(key.getBytes("UTF-8")) // Set Key
.parseClaimsJws(jwt) // 파싱 및 검증, 실패 시 에러
.getBody();
claimMap = claims;
//Date expiration = claims.get("exp", Date.class);
//String data = claims.get("data", String.class);
} catch (ExpiredJwtException e) { // 토큰이 만료되었을 경우
System.out.println(e);
...
} catch (Exception e) { // 그외 에러났을 경우
System.out.println(e);
...
}
return claimMap;
}
}
4. 결과
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyIiwiZGF0YSI6Ik15IEZpcnN0IEpXVCAhISIsImV4cCI6MTU5NzIxNDQzM30.a51SU-jC5OgvX2JgiNShQziKDcO_ARLGBpsnbwbBxqs
{sub=user, data=My First JWT !!, exp=1597145971}
1) 토큰 만료 시 출력되는 메시지
io.jsonwebtoken.ExpiredJwtException: JWT expired at 2020-08-12T15:40:33Z. Current time: 2020-08-12T15:40:34Z, a difference of 1388 milliseconds. Allowed clock skew: 0 milliseconds.
'IT > JAVA' 카테고리의 다른 글
[Java] 자바 정규식 정리 (0) | 2021.02.13 |
---|---|
[JAVA] 입출력 스트림 (InputStream, OutputStream)란? (0) | 2020.11.19 |
[JAVA] 배열 설명 및 초기화 방법 (0) | 2020.07.09 |
[Java] Windows 10 Open-JDK 8 다운로드 및 환경변수 설정 (0) | 2020.04.07 |
[Java] 람다(Lambda) 란? (0) | 2020.03.13 |