@@ -41,31 +41,31 @@ public JwtResponse dynamicBuilderSpecific(@RequestBody Map<String, Object> claim
4141 claims .forEach ((key , value ) -> {
4242 switch (key ) {
4343 case "iss" :
44- ensureType (key , value , String .class );
44+ ensureType (key , value , String .class );
4545 builder .setIssuer ((String ) value );
4646 break ;
4747 case "sub" :
48- ensureType (key , value , String .class );
48+ ensureType (key , value , String .class );
4949 builder .setSubject ((String ) value );
5050 break ;
5151 case "aud" :
52- ensureType (key , value , String .class );
52+ ensureType (key , value , String .class );
5353 builder .setAudience ((String ) value );
5454 break ;
5555 case "exp" :
56- value = ensureType (key , value , Long .class );
57- builder .setExpiration (Date .from (Instant .ofEpochSecond (( Long ) value )));
56+ ensureType (key , value , Long .class );
57+ builder .setExpiration (Date .from (Instant .ofEpochSecond (Long . parseLong ( value . toString ()) )));
5858 break ;
5959 case "nbf" :
60- value = ensureType (key , value , Long .class );
61- builder .setNotBefore (Date .from (Instant .ofEpochSecond (( Long ) value )));
60+ ensureType (key , value , Long .class );
61+ builder .setNotBefore (Date .from (Instant .ofEpochSecond (Long . parseLong ( value . toString ()) )));
6262 break ;
6363 case "iat" :
64- value = ensureType (key , value , Long .class );
65- builder .setIssuedAt (Date .from (Instant .ofEpochSecond (( Long ) value )));
64+ ensureType (key , value , Long .class );
65+ builder .setIssuedAt (Date .from (Instant .ofEpochSecond (Long . parseLong ( value . toString ()) )));
6666 break ;
6767 case "jti" :
68- ensureType (key , value , String .class );
68+ ensureType (key , value , String .class );
6969 builder .setId ((String ) value );
7070 break ;
7171 default :
@@ -78,20 +78,15 @@ public JwtResponse dynamicBuilderSpecific(@RequestBody Map<String, Object> claim
7878 return new JwtResponse (builder .compact ());
7979 }
8080
81- private Object ensureType (String registeredClaim , Object value , Class expectedType ) {
82- // we want to promote Integers to Longs in this case
83- if (expectedType == Long .class && value instanceof Integer ) {
84- value = ((Integer ) value ).longValue ();
85- }
86-
87- boolean isCorrectType = expectedType .isInstance (value );
81+ private void ensureType (String registeredClaim , Object value , Class expectedType ) {
82+ boolean isCorrectType =
83+ expectedType .isInstance (value ) ||
84+ expectedType == Long .class && value instanceof Integer ;
8885
8986 if (!isCorrectType ) {
9087 String msg = "Expected type: " + expectedType .getCanonicalName () + " for registered claim: '" +
9188 registeredClaim + "', but got value: " + value + " of type: " + value .getClass ().getCanonicalName ();
9289 throw new JwtException (msg );
9390 }
94-
95- return value ;
9691 }
9792}
0 commit comments