From c002c6f9f3794a7115e90c8993127533f536d5f5 Mon Sep 17 00:00:00 2001 From: grimsa Date: Tue, 24 Nov 2020 19:47:03 +0200 Subject: [PATCH] Add ClaimAccessor#hasClaim The new method is intended to replace ClaimAccessor#containsClaim, the return type of which was non-primitive Boolean. The existing containsClaim method is now deprecated. Closes gh-9201 --- .../security/oauth2/core/ClaimAccessor.java | 30 ++++++++++++++----- .../oauth2/jwt/NimbusJwtDecoderTests.java | 6 ++-- .../JwtGrantedAuthoritiesConverter.java | 2 +- 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/oauth2/oauth2-core/src/main/java/org/springframework/security/oauth2/core/ClaimAccessor.java b/oauth2/oauth2-core/src/main/java/org/springframework/security/oauth2/core/ClaimAccessor.java index 70998b06e4..f5a7a4c3e0 100644 --- a/oauth2/oauth2-core/src/main/java/org/springframework/security/oauth2/core/ClaimAccessor.java +++ b/oauth2/oauth2-core/src/main/java/org/springframework/security/oauth2/core/ClaimAccessor.java @@ -50,7 +50,7 @@ public interface ClaimAccessor { */ @SuppressWarnings("unchecked") default T getClaim(String claim) { - return !containsClaim(claim) ? null : (T) getClaims().get(claim); + return !hasClaim(claim) ? null : (T) getClaims().get(claim); } /** @@ -58,12 +58,26 @@ public interface ClaimAccessor { * {@code false}. * @param claim the name of the claim * @return {@code true} if the claim exists, otherwise {@code false} + * @since 5.5 */ - default Boolean containsClaim(String claim) { + default boolean hasClaim(String claim) { Assert.notNull(claim, "claim cannot be null"); return getClaims().containsKey(claim); } + /** + * Returns {@code true} if the claim exists in {@link #getClaims()}, otherwise + * {@code false}. + * @param claim the name of the claim + * @return {@code true} if the claim exists, otherwise {@code false} + * @deprecated Use + * {@link org.springframework.security.oauth2.core.ClaimAccessor#hasClaim} instead. + */ + @Deprecated + default Boolean containsClaim(String claim) { + return hasClaim(claim); + } + /** * Returns the claim value as a {@code String} or {@code null} if it does not exist or * is equal to {@code null}. @@ -72,7 +86,7 @@ public interface ClaimAccessor { * {@code null} */ default String getClaimAsString(String claim) { - return !containsClaim(claim) ? null + return !hasClaim(claim) ? null : ClaimConversionService.getSharedInstance().convert(getClaims().get(claim), String.class); } @@ -82,7 +96,7 @@ public interface ClaimAccessor { * @return the claim value or {@code null} if it does not exist */ default Boolean getClaimAsBoolean(String claim) { - return !containsClaim(claim) ? null + return !hasClaim(claim) ? null : ClaimConversionService.getSharedInstance().convert(getClaims().get(claim), Boolean.class); } @@ -92,7 +106,7 @@ public interface ClaimAccessor { * @return the claim value or {@code null} if it does not exist */ default Instant getClaimAsInstant(String claim) { - if (!containsClaim(claim)) { + if (!hasClaim(claim)) { return null; } Object claimValue = getClaims().get(claim); @@ -108,7 +122,7 @@ public interface ClaimAccessor { * @return the claim value or {@code null} if it does not exist */ default URL getClaimAsURL(String claim) { - if (!containsClaim(claim)) { + if (!hasClaim(claim)) { return null; } Object claimValue = getClaims().get(claim); @@ -127,7 +141,7 @@ public interface ClaimAccessor { */ @SuppressWarnings("unchecked") default Map getClaimAsMap(String claim) { - if (!containsClaim(claim)) { + if (!hasClaim(claim)) { return null; } final TypeDescriptor sourceDescriptor = TypeDescriptor.valueOf(Object.class); @@ -150,7 +164,7 @@ public interface ClaimAccessor { */ @SuppressWarnings("unchecked") default List getClaimAsStringList(String claim) { - if (!containsClaim(claim)) { + if (!hasClaim(claim)) { return null; } final TypeDescriptor sourceDescriptor = TypeDescriptor.valueOf(Object.class); diff --git a/oauth2/oauth2-jose/src/test/java/org/springframework/security/oauth2/jwt/NimbusJwtDecoderTests.java b/oauth2/oauth2-jose/src/test/java/org/springframework/security/oauth2/jwt/NimbusJwtDecoderTests.java index 3181054742..0169f03d30 100644 --- a/oauth2/oauth2-jose/src/test/java/org/springframework/security/oauth2/jwt/NimbusJwtDecoderTests.java +++ b/oauth2/oauth2-jose/src/test/java/org/springframework/security/oauth2/jwt/NimbusJwtDecoderTests.java @@ -261,7 +261,7 @@ public class NimbusJwtDecoderTests { public void decodeWhenSignedThenOk() { NimbusJwtDecoder jwtDecoder = new NimbusJwtDecoder(withSigning(JWK_SET)); Jwt jwt = jwtDecoder.decode(SIGNED_JWT); - assertThat(jwt.containsClaim(JwtClaimNames.EXP)).isNotNull(); + assertThat(jwt.hasClaim(JwtClaimNames.EXP)).isNotNull(); } @Test @@ -435,7 +435,7 @@ public class NimbusJwtDecoderTests { ) .build(); // @formatter:on - assertThat(decoder.decode(signedJwt.serialize()).containsClaim(JwtClaimNames.EXP)).isNotNull(); + assertThat(decoder.decode(signedJwt.serialize()).hasClaim(JwtClaimNames.EXP)).isNotNull(); } @Test @@ -553,7 +553,7 @@ public class NimbusJwtDecoderTests { ) .build(); // @formatter:on - assertThat(decoder.decode(signedJwt.serialize()).containsClaim(JwtClaimNames.EXP)).isNotNull(); + assertThat(decoder.decode(signedJwt.serialize()).hasClaim(JwtClaimNames.EXP)).isNotNull(); } @Test diff --git a/oauth2/oauth2-resource-server/src/main/java/org/springframework/security/oauth2/server/resource/authentication/JwtGrantedAuthoritiesConverter.java b/oauth2/oauth2-resource-server/src/main/java/org/springframework/security/oauth2/server/resource/authentication/JwtGrantedAuthoritiesConverter.java index 9e60085019..271e4c3c90 100644 --- a/oauth2/oauth2-resource-server/src/main/java/org/springframework/security/oauth2/server/resource/authentication/JwtGrantedAuthoritiesConverter.java +++ b/oauth2/oauth2-resource-server/src/main/java/org/springframework/security/oauth2/server/resource/authentication/JwtGrantedAuthoritiesConverter.java @@ -94,7 +94,7 @@ public final class JwtGrantedAuthoritiesConverter implements Converter