Skip to content

Commit db089de

Browse files
authored
Merge pull request #28 from JavaCoDED78/#27
2 parents a8ac00b + 1ca7f07 commit db089de

File tree

10 files changed

+152
-1
lines changed

10 files changed

+152
-1
lines changed

.github/dependabot.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
version: 2
2+
updates:
3+
- package-ecosystem: "maven"
4+
directory: "/"
5+
schedule:
6+
interval: "weekly"

.rultor.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
architect:
2+
- javacoded78
13
assets:
24
settings.xml: javacoded78/secrets#assets/settings.xml
35
secring.gpg: javacoded78/secrets#assets/Andrei Soroka_0x872A42FB_SECRET.gpg

README.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ This repository is an open-source Java library for fast and convenient using of
2020
* [Get subject from token](#get-subject-from-jwt-token)
2121
* [Get type from token](#get-type-from-jwt-token)
2222
* [Get claims from token](#get-claims-from-jwt-token)
23+
* [Get claim from token](#get-claim-from-jwt-token)
2324
* [How to contribute](#how-to-contribute)
2425

2526
## How to use
@@ -244,6 +245,21 @@ public class Main {
244245

245246
```
246247

248+
### Get claim from JWT token
249+
250+
To get claim by its name from JWT token payload call method `claim(String token, String key)`on `TokenService` object.
251+
252+
```java
253+
public class Main {
254+
public static void main(String[] args) {
255+
String token="eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhbmRyb3Nvcjk5QGdtYWlsLmNvbSIsImlkIjozLCJyb2xlcyI6WyJST0xFX1VTRVIiXSwiZXhwIjoxNzE3MTQ1MDIxfQ.w8ZFLFsKf7Qs9_dNb0WzdoyAIpWtfeEyqLfNI_G16_6NHbGwCRbeVVm_a_DzckytsyGYHTWRlZdi_gWK-HjrXg";
256+
String claim = (String) tokenService.claim(token, "subject");
257+
System.out.println(claim);
258+
}
259+
}
260+
261+
```
262+
247263
## How to contribute
248264

249265
See active issues at [issues page](https://github.com/JavaCoDED78/JWT-humble/issues)

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
<jjwt.version>0.12.5</jjwt.version>
4545
<lombok.version>1.18.32</lombok.version>
4646
<jedis.version>5.1.3</jedis.version>
47-
<checkstyle.version>3.2.2</checkstyle.version>
47+
<checkstyle.version>3.3.1</checkstyle.version>
4848
<junit-version>5.10.2</junit-version>
4949
<testcontainers.version>1.19.8</testcontainers.version>
5050
<jacoco.version>0.8.11</jacoco.version>

src/main/java/io/github/javacoded78/jwthumble/service/PersistentTokenServiceImpl.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,18 @@ public Map<String, Object> claims(final String token) {
148148
return new HashMap<>(claims.getPayload());
149149
}
150150

151+
@Override
152+
public Object claim(final String token,
153+
final String key) {
154+
Jws<Claims> claims = Jwts
155+
.parser()
156+
.verifyWith(this.key)
157+
.build()
158+
.parseSignedClaims(token);
159+
return claims.getPayload()
160+
.get(key);
161+
}
162+
151163
@Override
152164
public boolean invalidate(final String token) {
153165
return tokenStorage.remove(token);

src/main/java/io/github/javacoded78/jwthumble/service/TokenService.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,4 +73,14 @@ boolean isExpired(String token,
7373
*/
7474
Map<String, Object> claims(String token);
7575

76+
/**
77+
* Returns claim of JWT token by its key.
78+
*
79+
* @param token JWT token
80+
* @param key key of claim
81+
* @return value of claim or null if there is no value
82+
*/
83+
Object claim(String token,
84+
String key);
85+
7686
}

src/main/java/io/github/javacoded78/jwthumble/service/TokenServiceImpl.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,4 +122,16 @@ public Map<String, Object> claims(final String token) {
122122
return new HashMap<>(claims.getPayload());
123123
}
124124

125+
@Override
126+
public Object claim(final String token,
127+
final String key) {
128+
Jws<Claims> claims = Jwts
129+
.parser()
130+
.verifyWith(this.key)
131+
.build()
132+
.parseSignedClaims(token);
133+
return claims.getPayload()
134+
.get(key);
135+
}
136+
125137
}

src/test/java/io/github/javacoded78/jwthumble/service/PersistentTokenServiceImplTests.java

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import static org.junit.jupiter.api.Assertions.assertFalse;
1717
import static org.junit.jupiter.api.Assertions.assertNotEquals;
1818
import static org.junit.jupiter.api.Assertions.assertNotNull;
19+
import static org.junit.jupiter.api.Assertions.assertNull;
1920
import static org.junit.jupiter.api.Assertions.assertTrue;
2021

2122
class PersistentTokenServiceImplTests {
@@ -168,6 +169,51 @@ void claims_ReturnsCorrectClaims() {
168169
assertEquals(123, claims.get("key2"));
169170
}
170171

172+
@Test
173+
void claim_ExistingKey_ReturnsCorrectClaimValue() {
174+
Map<String, Object> customClaims = new HashMap<>();
175+
customClaims.put("key1", "value1");
176+
customClaims.put("key2", 123);
177+
178+
TokenParameters params = TokenParameters.builder(
179+
subject,
180+
type,
181+
duration
182+
)
183+
.claims(customClaims)
184+
.build();
185+
186+
String token = tokenService.create(params);
187+
Object claim = tokenService.claim(
188+
token,
189+
"key1"
190+
);
191+
assertNotNull(claim);
192+
assertEquals("value1", claim);
193+
}
194+
195+
@Test
196+
void claim_NotExistingKey_ReturnsNull() {
197+
Map<String, Object> customClaims = new HashMap<>();
198+
customClaims.put("key1", "value1");
199+
customClaims.put("key2", 123);
200+
201+
TokenParameters params = TokenParameters.builder(
202+
subject,
203+
type,
204+
duration
205+
)
206+
.claims(customClaims)
207+
.build();
208+
209+
String token = tokenService.create(params);
210+
Object claim = tokenService.claim(
211+
token,
212+
"notExistingKey"
213+
);
214+
assertNull(claim);
215+
}
216+
171217
@Test
172218
void invalidate_Token() {
173219
TokenParameters params = TokenParameters.builder(

src/test/java/io/github/javacoded78/jwthumble/service/TokenServiceImplTest.java

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import static org.junit.jupiter.api.Assertions.assertEquals;
1212
import static org.junit.jupiter.api.Assertions.assertFalse;
1313
import static org.junit.jupiter.api.Assertions.assertNotNull;
14+
import static org.junit.jupiter.api.Assertions.assertNull;
1415
import static org.junit.jupiter.api.Assertions.assertTrue;
1516

1617
class TokenServiceImplTest {
@@ -154,4 +155,49 @@ void claims_ReturnsCorrectClaims() {
154155
assertEquals(123, claims.get("key2"));
155156
}
156157

158+
@Test
159+
void claim_ExistingKey_ReturnsCorrectClaimValue() {
160+
Map<String, Object> customClaims = new HashMap<>();
161+
customClaims.put("key1", "value1");
162+
customClaims.put("key2", 123);
163+
164+
TokenParameters params = TokenParameters.builder(
165+
subject,
166+
type,
167+
duration
168+
)
169+
.claims(customClaims)
170+
.build();
171+
172+
String token = tokenService.create(params);
173+
Object claim = tokenService.claim(
174+
token,
175+
"key1"
176+
);
177+
assertNotNull(claim);
178+
assertEquals("value1", claim);
179+
}
180+
181+
@Test
182+
void claim_NotExistingKey_ReturnsNull() {
183+
Map<String, Object> customClaims = new HashMap<>();
184+
customClaims.put("key1", "value1");
185+
customClaims.put("key2", 123);
186+
187+
TokenParameters params = TokenParameters.builder(
188+
subject,
189+
type,
190+
duration
191+
)
192+
.claims(customClaims)
193+
.build();
194+
195+
String token = tokenService.create(params);
196+
Object claim = tokenService.claim(
197+
token,
198+
"notExistingKey"
199+
);
200+
assertNull(claim);
201+
}
202+
157203
}

src/test/java/io/github/javacoded78/jwthumble/storage/TokenStorageImplTests.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,5 +141,6 @@ void invalidate_SubjectAndType() {
141141
String existingToken = tokenStorage.get(params);
142142
assertNull(existingToken);
143143
}
144+
144145
}
145146

0 commit comments

Comments
 (0)