jwt4j-lite β Java λ° Spring Boot νκ²½μμ μ¬μ©ν μ μλ κ²½λνλ JWT(Json Web Token) λΌμ΄λΈλ¬λ¦¬
μ΄ νλ‘μ νΈλ io.jsonwebtoken:jjwt-api λΌμ΄λΈλ¬λ¦¬λ₯Ό λ체ν μ μλ JwtProvider μν μ μννλ©°,
JWTμ λ°κΈκ³Ό κ²μ¦ λ‘μ§μ 컀μ€ν°λ§μ΄μ§ν μ μλλ‘ μ€κ³λμμ΅λλ€.
Main Goals:
io.jsonwebtoken:jjwt-*λΌμ΄λΈλ¬λ¦¬λ₯Ό λ체 κ°λ₯ν κ²½λ JWT μμ§ μ 곡- μ΅μνμ μ€μ μΌλ‘ 컀μ€ν ν΄λ μ λ°κΈ λ° κ²μ¦ κΈ°λ₯ μ§μ
- μμ€μ μ€μ νμΌμ κ·κ²©μ ν΅μΌνμ¬ μ½λ νμ§ λ° κ°λ μ± ν₯μ
- Spring Bootμ μμ°μ€λ½κ² ν΅ν©λμ΄ λΉ λ₯Έ κ°λ° λ° μ μ§λ³΄μ κ°λ₯
- v1.0.0-rc β
- v0.1.2-beta β
- v0.1.1-beta β
-
HTTP Method
- API Method List
- API Detailed description
- ν ν° λ°ν / Token Issue
- ν ν° κ²μ¦ / Token Verify
- ν ν° μ 보 μΆμΆ / Token claim extraction
-
Direct Method
- Installation
- Usage Example
- ν ν° λ°ν / Token Issue
- ν ν° κ²μ¦ / Token Verify
- ν ν° μ 보 μΆμΆ / Token claim extraction
-
Response Format
- ν ν° λ°ν / Token Issue
- ν ν° κ²μ¦ / Token Verify
- ν ν° μ 보 μΆμΆ / Token claim extraction
| Method Name | HTTP Method | Description |
|---|---|---|
| api/v1/createToken | POST | ν ν° λ°ν |
| api/v1/verifyToken | POST | ν ν° κ²μ¦ |
| api/v1/extractClaim | POST | ν ν° μ 보 μΆμΆ |
- μ¬μ©μμ μ 보λ₯Ό ν΅ν΄ ν ν°μ λ°ννλ€.
- λ©μλλͺ : api/v1/createToken
| Request Type | Value | Description |
|---|---|---|
| POST | JSONObject | JSONObject |
- ν ν°μ λ΄κΈ°λ μ 보λ νμμ λ°λΌ λ¬λΌμ§λ€(μλμ νλλ μ¬μ©νμ§ μμλ 무κ΄)
| Key | Value | Description |
|---|---|---|
| ci | String | κ΅¬λΆ μ½λ κ° |
| role | String | μ¬μ©μ κΆν |
| username | String | μ¬μ©μ μμ΄λ |
| password | String | μ¬μ©μ ν¨μ€μλ (νλ¬Έ/μνΈλ¬Έ 무κ΄) |
| ... | Primitive Types | μ¬μ©μ μ 보 |
{
"ci": "12345678",
"role" : "user",
"username" : "test_user",
"password" : "[VK+SJA26vJFCuDL/kPYAQ073GZTmTOpAbi5izZ10AFx3NlDDW6brVoBOeFlfA5hxHeOQw+Pz+M/XN.."
}- μ¬μ©μμ ν ν°μ κ²μ¦νλ€.
- λ©μλλͺ : api/v1/verifyToken
| Request Type | Value | Description |
|---|---|---|
| POST | JSONObject | JSONObject |
| Key | Value | Description |
|---|---|---|
| jwt | String | ν ν° κ° |
{
"jwt": "e29JzDyi.mwVQotk9DFqLwPpLw8TutiwiX6x4XQUrYtngFyoC7VPVs1txq54NGuzWbHt12rGbA6nnetYSnAinJRpVRzjyXj3GogWjwb2FMeYPshrZFhpaVvJFy2g39FcNusGHoHH5uBcmdEvme6g2crSuNKXbtsaREbakFtGu4oCk7CuVvz1XoAoc43Lc1hAbdU2VReEF7wxsKYQQLk.Ou+L/qyvpu8ssLpZ+qtDOYRQvHEcT/Qvq86KPapmXugS3SvZPnTnZdjzAB+Kcfd+bZX+OjXMBprUQHId25oD5OVK9XVq+3p839qpiJrbdYx6jWG7R5FhlQzQsH2CZezizUEkUlpc5Q38CNN3eJEZAOkO0TXhyMSyUkKyrMVDdVcLdJEzEXTVhwIICfG/+JCziI7/ijqBfSlGE4yB+14tfV2Ks2LdjfXf65zphz1Wm43oP2jzPFvreKta1twUKvhzKLAiYsxMD+kuL14zOJvYQJlnGozZG4rJT8qZUEVMglbCuoeqmXzmAUSGOcg6uaIN2/uPFT4oOgkmAkC5bvKw2g=="
}- μ¬μ©μμ ν ν°μ ν΅ν΄ λ΄λΆ μ 보λ₯Ό μΆμΆνλ€.
- ν΄λΉ ν ν°μ λ§λ£ μ¬λΆμ κ΄κ³μμ΄ μλͺ κ²μ¦λ§ ν΅κ³Όνλ©΄ λ΄λΆ μ 보(Claim)μ μΆμΆν μ μλ€.
- λ©μλλͺ : api/v1/extractClaim
| Request Type | Value | Description |
|---|---|---|
| POST | JSONObject | JSONObject |
| Key | Value | Description |
|---|---|---|
| jwt | String | ν ν° κ° |
{
"jwt": "e29JzDyi.mwVQotk9DFqLwPpLw8TutiwiX6x4XQUrYtngFyoC7VPVs1txq54NGuzWbHt12rGbA6nnetYSnAinJRpVRzjyXj3GogWjwb2FMeYPshrZFhpaVvJFy2g39FcNusGHoHH5uBcmdEvme6g2crSuNKXbtsaREbakFtGu4oCk7CuVvz1XoAoc43Lc1hAbdU2VReEF7wxsKYQQLk.Ou+L/qyvpu8ssLpZ+qtDOYRQvHEcT/Qvq86KPapmXugS3SvZPnTnZdjzAB+Kcfd+bZX+OjXMBprUQHId25oD5OVK9XVq+3p839qpiJrbdYx6jWG7R5FhlQzQsH2CZezizUEkUlpc5Q38CNN3eJEZAOkO0TXhyMSyUkKyrMVDdVcLdJEzEXTVhwIICfG/+JCziI7/ijqBfSlGE4yB+14tfV2Ks2LdjfXf65zphz1Wm43oP2jzPFvreKta1twUKvhzKLAiYsxMD+kuL14zOJvYQJlnGozZG4rJT8qZUEVMglbCuoeqmXzmAUSGOcg6uaIN2/uPFT4oOgkmAkC5bvKw2g=="
}// Gradle
implementation 'jwt4j-lite-*.jar'
import java.util.HashMap;
import java.util.Map;
public class JwtExample {
public static void main(String[] args) {
// ========================
// 1. Create JWT
// ========================
Map<String, String> claims = new HashMap<>();
claims.put("userId", "user123");
claims.put("role", "ADMIN");
try {
CreateTokenResponse createResponse = tokenService.createJwt(claims);
String jwtToken = createResponse.getJwt();
System.out.println("Generated JWT: " + jwtToken);
// ========================
// 2. Verify JWT
// ========================
VerifyTokenResponse verifyResponse = tokenService.verifyJwt(jwtToken);
System.out.println("Verification result: " + verifyResponse.getResultMsg());
// ========================
// 3. Extract Claims
// ========================
ExtractClaimResponse claimResponse = tokenService.extractClaimToJwt(jwtToken);
System.out.println("Extracted Claims: " + claimResponse.getClaims());
} catch (TokenException e) {
System.err.println("Token error: " + e.getErrorCode() + " - " + e.getMessage());
} catch (Exception e) {
e.printStackTrace();
}
}
}| Key | Value | Description |
|---|---|---|
| claim | Map<String, String> | ν ν° μ 보 ν¬ν¨λλ λ°μ΄ν° |
| jwt | String | ν ν° |
| resultCode | String | κ²°κ³Ό μ½λ |
| resultMsg | String | κ²°κ³Ό λ©μμ§ |
{
"claim": {
"ci": "12345678",
"role": "user",
"username": "test_user",
"password": "[VK+SJA26vJFCuDL/kPYAQ073GZTmTOpAbi5izZ10AFx3NlDDW6brVoBOeFlfA5hxHeOQw+Pz+M/XN.."
},
"jwt": "e29JzDyi.mwVQotk9DFqLwPpLw8TutiwiX6x4XQUrYtngFyoC7VPVs1txq54NGuzWbHt12rGbA6nnetYSnAinJRpVRzjyXj3GogWjwb2FMeYPshrZFhpaVvJFy2g39FcNusGHoHH5uBcmdEvme6g2crSuNKXbtsaREbakFtGu4oCk7CuVvz1XoAoc43Lc1hAbdU2VReEF7wxsKYQQLk.Ou+L/qyvpu8ssLpZ+qtDOYRQvHEcT/Qvq86KPapmXugS3SvZPnTnZdjzAB+Kcfd+bZX+OjXMBprUQHId25oD5OVK9XVq+3p839qpiJrbdYx6jWG7R5FhlQzQsH2CZezizUEkUlpc5Q38CNN3eJEZAOkO0TXhyMSyUkKyrMVDdVcLdJEzEXTVhwIICfG/+JCziI7/ijqBfSlGE4yB+14tfV2Ks2LdjfXf65zphz1Wm43oP2jzPFvreKta1twUKvhzKLAiYsxMD+kuL14zOJvYQJlnGozZG4rJT8qZUEVMglbCuoeqmXzmAUSGOcg6uaIN2/uPFT4oOgkmAkC5bvKw2g==",
"resultCode": "200",
"resultMsg": "Success"
}| Key | Value | Description |
|---|---|---|
| claim | Map<String, String> | ν ν° μ 보 ν¬ν¨λλ λ°μ΄ν° |
| jwt | String | ν ν° |
| resultCode | String | κ²°κ³Ό μ½λ |
| resultMsg | String | κ²°κ³Ό λ©μμ§ |
{
"claim": {
"ci": "12345678",
"role": "user",
"username": "test_user",
"password": "[VK+SJA26vJFCuDL/kPYAQ073GZTmTOpAbi5izZ10AFx3NlDDW6brVoBOeFlfA5hxHeOQw+Pz+M/XN.."
},
"jwt": "e29JzDyi.mwVQotk9DFqLwPpLw8TutiwiX6x4XQUrYtngFyoC7VPVs1txq54NGuzWbHt12rGbA6nnetYSnAinJRpVRzjyXj3GogWjwb2FMeYPshrZFhpaVvJFy2g39FcNusGHoHH5uBcmdEvme6g2crSuNKXbtsaREbakFtGu4oCk7CuVvz1XoAoc43Lc1hAbdU2VReEF7wxsKYQQLk.Ou+L/qyvpu8ssLpZ+qtDOYRQvHEcT/Qvq86KPapmXugS3SvZPnTnZdjzAB+Kcfd+bZX+OjXMBprUQHId25oD5OVK9XVq+3p839qpiJrbdYx6jWG7R5FhlQzQsH2CZezizUEkUlpc5Q38CNN3eJEZAOkO0TXhyMSyUkKyrMVDdVcLdJEzEXTVhwIICfG/+JCziI7/ijqBfSlGE4yB+14tfV2Ks2LdjfXf65zphz1Wm43oP2jzPFvreKta1twUKvhzKLAiYsxMD+kuL14zOJvYQJlnGozZG4rJT8qZUEVMglbCuoeqmXzmAUSGOcg6uaIN2/uPFT4oOgkmAkC5bvKw2g==",
"resultCode": "200",
"resultMsg": "Success"
}| Key | Value | Description |
|---|---|---|
| jwt | String | ν ν° |
| resultCode | String | κ²°κ³Ό μ½λ |
| resultMsg | String | κ²°κ³Ό λ©μμ§ |
{
"claim": {
"ci": "12345678",
"role": "user",
"username": "test_user",
"password": "[VK+SJA26vJFCuDL/kPYAQ073GZTmTOpAbi5izZ10AFx3NlDDW6brVoBOeFlfA5hxHeOQw+Pz+M/XN.."
},
"jwt": "e29JzDyi.mwVQotk9DFqLwPpLw8TutiwiX6x4XQUrYtngFyoC7VPVs1txq54NGuzWbHt12rGbA6nnetYSnAinJRpVRzjyXj3GogWjwb2FMeYPshrZFhpaVvJFy2g39FcNusGHoHH5uBcmdEvme6g2crSuNKXbtsaREbakFtGu4oCk7CuVvz1XoAoc43Lc1hAbdU2VReEF7wxsKYQQLk.Ou+L/qyvpu8ssLpZ+qtDOYRQvHEcT/Qvq86KPapmXugS3SvZPnTnZdjzAB+Kcfd+bZX+OjXMBprUQHId25oD5OVK9XVq+3p839qpiJrbdYx6jWG7R5FhlQzQsH2CZezizUEkUlpc5Q38CNN3eJEZAOkO0TXhyMSyUkKyrMVDdVcLdJEzEXTVhwIICfG/+JCziI7/ijqBfSlGE4yB+14tfV2Ks2LdjfXf65zphz1Wm43oP2jzPFvreKta1twUKvhzKLAiYsxMD+kuL14zOJvYQJlnGozZG4rJT8qZUEVMglbCuoeqmXzmAUSGOcg6uaIN2/uPFT4oOgkmAkC5bvKw2g==",
"resultCode": "200",
"resultMsg": "Success"
}

