Skip to content

Commit b6b8aa0

Browse files
committed
Refactor authoritiesClaimName to use Collection and remove null checks
- Change authoritiesClaimName field to Collection<String> authoritiesClaimNames - Add isExplicitlySet flag to preserve original behavior - Remove null checks by ensuring authoritiesClaimNames is always initialized - Maintain backward compatibility for explicit vs default claim name handling - Delete unnecessary test code related to previous null-checking logic
1 parent e3249df commit b6b8aa0

File tree

2 files changed

+9
-27
lines changed

2 files changed

+9
-27
lines changed

oauth2/oauth2-resource-server/src/main/java/org/springframework/security/oauth2/server/resource/authentication/JwtGrantedAuthoritiesConverter.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2022 the original author or authors.
2+
* Copyright 2002-2025 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -53,7 +53,9 @@ public final class JwtGrantedAuthoritiesConverter implements Converter<Jwt, Coll
5353

5454
private String authoritiesClaimDelimiter = DEFAULT_AUTHORITIES_CLAIM_DELIMITER;
5555

56-
private String authoritiesClaimName;
56+
private Collection<String> authoritiesClaimNames = WELL_KNOWN_AUTHORITIES_CLAIM_NAMES;
57+
58+
private boolean isExplicitlySet = false;
5759

5860
/**
5961
* Extract {@link GrantedAuthority}s from the given {@link Jwt}.
@@ -102,14 +104,15 @@ public void setAuthoritiesClaimDelimiter(String authoritiesClaimDelimiter) {
102104
*/
103105
public void setAuthoritiesClaimName(String authoritiesClaimName) {
104106
Assert.hasText(authoritiesClaimName, "authoritiesClaimName cannot be empty");
105-
this.authoritiesClaimName = authoritiesClaimName;
107+
this.authoritiesClaimNames = Collections.singletonList(authoritiesClaimName);
108+
this.isExplicitlySet = true;
106109
}
107110

108111
private String getAuthoritiesClaimName(Jwt jwt) {
109-
if (StringUtils.hasText(this.authoritiesClaimName)) {
110-
return this.authoritiesClaimName;
112+
if (this.isExplicitlySet) {
113+
return this.authoritiesClaimNames.iterator().next();
111114
}
112-
for (String claimName : WELL_KNOWN_AUTHORITIES_CLAIM_NAMES) {
115+
for (String claimName : this.authoritiesClaimNames) {
113116
if (jwt.hasClaim(claimName)) {
114117
return claimName;
115118
}

oauth2/oauth2-resource-server/src/test/java/org/springframework/security/oauth2/server/resource/authentication/JwtGrantedAuthoritiesConverterTests.java

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,11 @@
2121
import java.util.Collections;
2222

2323
import org.junit.jupiter.api.Test;
24-
import org.junit.jupiter.params.ParameterizedTest;
25-
import org.junit.jupiter.params.provider.NullSource;
26-
import org.junit.jupiter.params.provider.ValueSource;
2724

2825
import org.springframework.security.core.GrantedAuthority;
2926
import org.springframework.security.core.authority.SimpleGrantedAuthority;
3027
import org.springframework.security.oauth2.jwt.Jwt;
3128
import org.springframework.security.oauth2.jwt.TestJwts;
32-
import org.springframework.test.util.ReflectionTestUtils;
3329

3430
import static org.assertj.core.api.Assertions.assertThat;
3531
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
@@ -274,21 +270,4 @@ public void convertWithCustomAuthoritiesSplitRegexWhenTokenHasScopeAttributeThen
274270
new SimpleGrantedAuthority("SCOPE_message:write"));
275271
}
276272

277-
@ParameterizedTest
278-
@ValueSource(strings = { "", " " })
279-
@NullSource
280-
public void convertWhenAuthoritiesClaimNameIsBlankThenUsesWellKnownClaims(String invalidClaimName)
281-
throws Exception {
282-
// @formatter:off
283-
Jwt jwt = TestJwts.jwt()
284-
.claim("scope", "message:read message:write")
285-
.build();
286-
// @formatter:on
287-
JwtGrantedAuthoritiesConverter jwtGrantedAuthoritiesConverter = new JwtGrantedAuthoritiesConverter();
288-
ReflectionTestUtils.setField(jwtGrantedAuthoritiesConverter, "authoritiesClaimName", invalidClaimName);
289-
Collection<GrantedAuthority> authorities = jwtGrantedAuthoritiesConverter.convert(jwt);
290-
assertThat(authorities).containsExactly(new SimpleGrantedAuthority("SCOPE_message:read"),
291-
new SimpleGrantedAuthority("SCOPE_message:write"));
292-
}
293-
294273
}

0 commit comments

Comments
 (0)