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.
'■ Spring + Boot' 카테고리의 다른 글
HikariCP (=JDBC Connection Pool????) (0) | 2021.05.30 |
---|---|
스프링 다시 총 정리 - 1.DI내용, 2.AOP(방법론) (0) | 2021.05.11 |
[Spring] Bean 의존 관게 설정 법 /property와 constructor-arg 차이 (0) | 2021.02.17 |
스프링 MVC 핵싱 구성 요소(스프링 MVC 흐름) ★ (0) | 2021.02.15 |
스프링 Security_로그인_기본 컨텍스트 설정 ★★★★ (0) | 2021.02.13 |