Skip to content

Commit cca4781

Browse files
claim class with claim converter
1 parent ff3b4ba commit cca4781

File tree

5 files changed

+64
-78
lines changed

5 files changed

+64
-78
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.bastiaanjansen.jwt;
2+
3+
@FunctionalInterface
4+
public interface ClaimConverter<T> {
5+
T convert(Object value);
6+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package com.bastiaanjansen.jwt;
2+
3+
import com.bastiaanjansen.jwt.Utils.Base64Utils;
4+
import org.json.JSONObject;
5+
6+
import java.util.HashMap;
7+
import java.util.Map;
8+
9+
public class Claims {
10+
protected final Map<String, Object> claims;
11+
12+
protected Claims() {
13+
claims = new HashMap<>();
14+
}
15+
16+
public boolean containsClaim(String name) {
17+
return claims.containsKey(name);
18+
}
19+
20+
public Map<String, Object> getAsMap() {
21+
return new HashMap<>(claims);
22+
}
23+
24+
public String base64Encoded() {
25+
return Base64Utils.encodeBase64URL(new JSONObject(claims).toString());
26+
}
27+
28+
public Object getClaim(String name) {
29+
return claims.get(name);
30+
}
31+
32+
public <T> T getClaim(String name, Class<T> type) {
33+
Object value = claims.get(name);
34+
return type.cast(value);
35+
}
36+
37+
public <T> T getClaim(String name, ClaimConverter<T> converter) {
38+
Object value = claims.get(name);
39+
return converter.convert(value);
40+
}
41+
42+
public void addClaim(String name, Object value) {
43+
if (name == null) throw new IllegalArgumentException("name cannot be null");
44+
if (value == null) throw new IllegalArgumentException("value cannot be null");
45+
claims.put(name, value);
46+
}
47+
}

src/main/java/com/bastiaanjansen/jwt/Header.java

Lines changed: 4 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,16 @@
33
import com.bastiaanjansen.jwt.Utils.Base64Utils;
44
import org.json.JSONObject;
55

6-
import java.util.HashMap;
76
import java.util.Map;
87

9-
public class Header {
8+
public class Header extends Claims {
109
public static class Registered {
1110
static String TYPE = "typ";
1211
static String CONTENT_TYPE = "cty";
1312
static String ALGORITHM = "alg";
1413
}
1514

16-
private final Map<String, Object> claims;
17-
1815
public Header() {
19-
claims = new HashMap<>();
2016
setType("JWT");
2117
}
2218

@@ -36,52 +32,22 @@ public void setType(String type) {
3632
}
3733

3834
public String getType() {
39-
Object type = claims.get(Registered.TYPE);
40-
return getString(type);
35+
return getClaim(Registered.TYPE, String.class);
4136
}
4237

4338
public void setContentType(String value) {
4439
addClaim(Registered.CONTENT_TYPE, value);
4540
}
4641

4742
public String getContentType() {
48-
Object contentType = claims.get(Registered.CONTENT_TYPE);
49-
return getString(contentType);
43+
return getClaim(Registered.CONTENT_TYPE, String.class);
5044
}
5145

5246
public void setAlgorithm(String algorithm) {
5347
addClaim(Registered.ALGORITHM, algorithm);
5448
}
5549

5650
public String getAlgorithm() {
57-
Object algorithm = claims.get(Registered.ALGORITHM);
58-
return getString(algorithm);
59-
}
60-
61-
public boolean containsClaim(String name) {
62-
return claims.containsKey(name);
63-
}
64-
65-
public Map<String, Object> getAsMap() {
66-
return new HashMap<>(claims);
67-
}
68-
69-
public String base64Encoded() {
70-
return Base64Utils.encodeBase64URL(new JSONObject(claims).toString());
71-
}
72-
73-
public Object getClaim(String name) {
74-
return claims.get(name);
75-
}
76-
77-
public void addClaim(String name, Object value) {
78-
if (name == null) throw new IllegalArgumentException("name cannot be null");
79-
if (value == null) throw new IllegalArgumentException("value cannot be null");
80-
81-
claims.put(name, value);
82-
}
83-
84-
private String getString(Object object) {
85-
return object != null ? String.valueOf(object) : null;
51+
return getClaim(Registered.ALGORITHM, String.class);
8652
}
8753
}

src/main/java/com/bastiaanjansen/jwt/Payload.java

Lines changed: 6 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import java.util.HashMap;
88
import java.util.Map;
99

10-
public class Payload {
10+
public class Payload extends Claims {
1111
public static class Registered {
1212
static String ISSUER = "iss";
1313
static String SUBJECT = "sub";
@@ -18,14 +18,10 @@ public static class Registered {
1818
static String JWT_ID = "jti";
1919
}
2020

21-
private final Map<String, Object> claims;
22-
23-
public Payload() {
24-
claims = new HashMap<>();
25-
}
21+
public Payload() {}
2622

2723
public Payload(Map<String, Object> map) {
28-
claims = new HashMap<>(map);
24+
claims.putAll(map);
2925
}
3026

3127
public static Payload fromBase64EncodedJSON(String encodedJSON) {
@@ -39,17 +35,15 @@ public void setIssuer(String issuer) {
3935
}
4036

4137
public String getIssuer() {
42-
Object issuer = claims.get(Registered.ISSUER);
43-
return getString(issuer);
38+
return getClaim(Registered.ISSUER, String.class);
4439
}
4540

4641
public void setSubject(String subject) {
4742
addClaim(Registered.SUBJECT, subject);
4843
}
4944

5045
public String getSubject() {
51-
Object subject = claims.get(Registered.SUBJECT);
52-
return getString(subject);
46+
return getClaim(Registered.SUBJECT, String.class);
5347
}
5448

5549
public void setAudience(String... audience) {
@@ -109,34 +103,7 @@ public void setID(String id) {
109103
}
110104

111105
public String getID() {
112-
Object id = claims.get(Registered.JWT_ID);
113-
return getString(id);
114-
}
115-
116-
public boolean containsClaim(String name) {
117-
return claims.containsKey(name);
118-
}
119-
120-
public void addClaim(String name, Object value) {
121-
if (name == null) throw new IllegalArgumentException("name cannot be null");
122-
if (value == null) throw new IllegalArgumentException("value cannot be null");
123-
claims.put(name, value);
124-
}
125-
126-
public Object getClaim(String name) {
127-
return claims.get(name);
128-
}
129-
130-
public Map<String, Object> getAsMap() {
131-
return new HashMap<>(claims);
132-
}
133-
134-
public String base64Encoded() {
135-
return Base64Utils.encodeBase64URL(new JSONObject(claims).toString());
136-
}
137-
138-
private String getString(Object object) {
139-
return object != null ? String.valueOf(object) : null;
106+
return getClaim(Registered.JWT_ID, String.class);
140107
}
141108

142109
private Date getDate(Object object) {

src/test/java/com/bastiaanjansen/jwt/JWTTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ void builder_withClaim() throws JWTCreationException {
130130
JWT jwt = new JWT.Builder(algorithm).withClaim("custom-claim", "custom-claim-value").build();
131131
String expected = "custom-claim-value";
132132

133-
assertThat(jwt.getPayload().getClaim("custom-claim"), is(expected));
133+
assertThat(jwt.getPayload().getClaim("custom-claim", String.class), is(expected));
134134
}
135135

136136
@Test

0 commit comments

Comments
 (0)