Skip to content

Commit df4b4cd

Browse files
author
nigel.zheng
committed
refactor: add type for Claim
1 parent bc958f7 commit df4b4cd

File tree

7 files changed

+37
-9
lines changed

7 files changed

+37
-9
lines changed

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ dependencies {
2525
implementation "org.springframework.boot:spring-boot-starter-test:${springBootVersion}"
2626
implementation "org.springframework.security.oauth:spring-security-oauth2:2.2.1.RELEASE"
2727
implementation "org.springframework.security:spring-security-test:5.0.6.RELEASE"
28+
implementation group: 'commons-beanutils', name: 'commons-beanutils', version: '1.9.3'
2829
}
2930

3031
repositories {

src/main/java/com/github/ahunigel/test/security/AttachClaimsTestExecutionListener.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.github.ahunigel.test.security;
22

3+
import com.github.ahunigel.test.security.util.ClaimUtils;
34
import org.slf4j.Logger;
45
import org.slf4j.LoggerFactory;
56
import org.springframework.core.annotation.AnnotationUtils;
@@ -10,10 +11,8 @@
1011
import org.springframework.test.context.support.AbstractTestExecutionListener;
1112

1213
import java.lang.reflect.AnnotatedElement;
13-
import java.util.Arrays;
1414
import java.util.HashMap;
1515
import java.util.Map;
16-
import java.util.stream.Collectors;
1716

1817
/**
1918
* Created by Nigel.Zheng on 8/3/2018.
@@ -46,7 +45,7 @@ private AttachClaims findAnnotation(AnnotatedElement annotated) {
4645
public void attachClaimsToAuthentication(AttachClaims annotation) {
4746
Authentication authentication = TestSecurityContextHolder.getContext().getAuthentication();
4847
if (authentication != null && authentication instanceof AbstractAuthenticationToken) {
49-
Map<String, String> claims = Arrays.stream(annotation.value()).collect(Collectors.toMap(Claim::name, Claim::value));
48+
Map<String, Object> claims = ClaimUtils.getClaims(annotation.value());
5049
Map<String, String> stringMap = toMap(annotation.claims());
5150
stringMap.entrySet().stream().forEach(entry -> claims.putIfAbsent(entry.getKey(), entry.getValue()));
5251
if (!claims.isEmpty()) {

src/main/java/com/github/ahunigel/test/security/Claim.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,6 @@
1414
String name();
1515

1616
String value();
17+
18+
Class<?> type() default String.class;
1719
}

src/main/java/com/github/ahunigel/test/security/WithMockUserAndClaims.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.github.ahunigel.test.security;
22

3+
import com.github.ahunigel.test.security.util.ClaimUtils;
34
import com.github.ahunigel.test.security.util.MockUserUtils;
45
import org.springframework.core.annotation.AliasFor;
56
import org.springframework.security.authentication.AbstractAuthenticationToken;
@@ -10,9 +11,7 @@
1011
import org.springframework.security.test.context.support.WithSecurityContextFactory;
1112

1213
import java.lang.annotation.*;
13-
import java.util.Arrays;
1414
import java.util.Map;
15-
import java.util.stream.Collectors;
1615

1716
/**
1817
* Created by Nigel Zheng on 8/3/2018.
@@ -44,7 +43,7 @@ class WithMockUserWithClaimsSecurityContextFactory implements WithSecurityContex
4443
public SecurityContext createSecurityContext(WithMockUserAndClaims annotation) {
4544
SecurityContext context = MockUserUtils.getSecurityContext(annotation.user());
4645
Authentication authentication = context.getAuthentication();
47-
Map<String, String> claims = Arrays.stream(annotation.value()).collect(Collectors.toMap(Claim::name, Claim::value));
46+
Map<String, Object> claims = ClaimUtils.getClaims(annotation.value());
4847
if (!claims.isEmpty() && authentication instanceof AbstractAuthenticationToken) {
4948
((AbstractAuthenticationToken) authentication).setDetails(claims);
5049
}

src/main/java/com/github/ahunigel/test/security/oauth2/WithMockOAuth2User.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.github.ahunigel.test.security.oauth2;
22

33
import com.github.ahunigel.test.security.Claim;
4+
import com.github.ahunigel.test.security.util.ClaimUtils;
45
import com.github.ahunigel.test.security.util.MockUserUtils;
56
import org.springframework.security.core.context.SecurityContext;
67
import org.springframework.security.core.context.SecurityContextHolder;
@@ -11,9 +12,7 @@
1112

1213
import java.lang.annotation.Retention;
1314
import java.lang.annotation.RetentionPolicy;
14-
import java.util.Arrays;
1515
import java.util.Map;
16-
import java.util.stream.Collectors;
1716

1817
/**
1918
* Created by Nigel Zheng on 8/3/2018.
@@ -43,7 +42,7 @@ public SecurityContext createSecurityContext(final WithMockOAuth2User annotation
4342
OAuth2Authentication oAuth2Authentication = new OAuth2Authentication(
4443
WithMockOAuth2Client.WithMockOAuth2ClientSecurityContextFactory.getOAuth2Request(annotation.client()),
4544
MockUserUtils.getAuthentication(annotation.user()));
46-
Map<String, String> claims = Arrays.stream(annotation.claims()).collect(Collectors.toMap(Claim::name, Claim::value));
45+
Map<String, Object> claims = ClaimUtils.getClaims(annotation.claims());
4746
if (!claims.isEmpty()) {
4847
oAuth2Authentication.setDetails(claims);
4948
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.github.ahunigel.test.security.util;
2+
3+
import com.github.ahunigel.test.security.Claim;
4+
import org.apache.commons.beanutils.ConvertUtils;
5+
6+
import java.util.Arrays;
7+
import java.util.Map;
8+
import java.util.stream.Collectors;
9+
10+
/**
11+
* Created by Nigel.Zheng on 8/3/2018.
12+
*/
13+
public class ClaimUtils {
14+
private ClaimUtils() {
15+
throw new InstantiationError();
16+
}
17+
18+
public static Map<String, Object> getClaims(Claim[] claims) {
19+
return Arrays.stream(claims)
20+
.collect(Collectors.toMap(Claim::name, claim ->
21+
ConvertUtils.convert(claim.value(), claim.type())
22+
));
23+
}
24+
}

src/main/java/com/github/ahunigel/test/security/util/MockUserUtils.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@
2121
* Created by Nigel Zheng on 8/3/2018.
2222
*/
2323
public class MockUserUtils {
24+
private MockUserUtils() {
25+
throw new InstantiationError();
26+
}
27+
2428
public static SecurityContext getSecurityContext(WithMockUser withMockUser) {
2529
WithSecurityContext withSecurityContext = AnnotationUtils
2630
.findAnnotation(withMockUser.getClass(), WithSecurityContext.class);

0 commit comments

Comments
 (0)