Browse Source

Add generic getClaim() method in ClaimAccessor

Fixes gh-6947
pull/6901/head
Thomas Vitale 7 years ago committed by Joe Grandja
parent
commit
417ad40d10
  1. 14
      oauth2/oauth2-core/src/main/java/org/springframework/security/oauth2/core/ClaimAccessor.java
  2. 45
      oauth2/oauth2-core/src/test/java/org/springframework/security/oauth2/core/ClaimAccessorTests.java

14
oauth2/oauth2-core/src/main/java/org/springframework/security/oauth2/core/ClaimAccessor.java

@ -39,6 +39,20 @@ public interface ClaimAccessor { @@ -39,6 +39,20 @@ public interface ClaimAccessor {
*/
Map<String, Object> getClaims();
/**
* Returns the claim value as a {@code T} type.
* The claim value is expected to be of type {@code T}.
*
* @since 5.2
* @param claim the name of the claim
* @param <T> the type of the claim value
* @return the claim value
*/
@SuppressWarnings("unchecked")
default <T> T getClaim(String claim) {
return !containsClaim(claim) ? null : (T) getClaims().get(claim);
}
/**
* Returns {@code true} if the claim exists in {@link #getClaims()}, otherwise {@code false}.
*

45
oauth2/oauth2-core/src/test/java/org/springframework/security/oauth2/core/ClaimAccessorTests.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2002-2018 the original author or authors.
* Copyright 2002-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -19,11 +19,14 @@ import org.junit.Before; @@ -19,11 +19,14 @@ import org.junit.Before;
import org.junit.Test;
import java.time.Instant;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.catchThrowable;
/**
* Tests for {@link ClaimAccessor}.
@ -101,4 +104,44 @@ public class ClaimAccessorTests { @@ -101,4 +104,44 @@ public class ClaimAccessorTests {
assertThat(this.claimAccessor.getClaimAsString(claimName)).isNull();
}
@Test
public void getClaimWhenNotExistingThenReturnNull() {
String claimName = "list";
List<String> actualClaimValue = this.claimAccessor.getClaim(claimName);
assertThat(actualClaimValue).isNull();
}
@Test
public void getClaimWhenValueIsConvertedThenReturnList() {
List<String> expectedClaimValue = Arrays.asList("item1", "item2");
String claimName = "list";
this.claims.put(claimName, expectedClaimValue);
List<String> actualClaimValue = this.claimAccessor.getClaim(claimName);
assertThat(actualClaimValue).containsOnlyElementsOf(expectedClaimValue);
}
@Test
public void getClaimWhenValueIsConvertedThenReturnBoolean() {
boolean expectedClaimValue = true;
String claimName = "boolean";
this.claims.put(claimName, expectedClaimValue);
boolean actualClaimValue = this.claimAccessor.getClaim(claimName);
assertThat(actualClaimValue).isEqualTo(expectedClaimValue);
}
@Test
public void getClaimWhenValueIsNotConvertedThenThrowClassCastException() {
String expectedClaimValue = "true";
String claimName = "boolean";
this.claims.put(claimName, expectedClaimValue);
Throwable thrown = catchThrowable(() -> { boolean actualClaimValue = this.claimAccessor.getClaim(claimName); });
assertThat(thrown).isInstanceOf(ClassCastException.class);
}
}

Loading…
Cancel
Save