Replace Streams with Loops
First version of replacing streams fix wwwAuthenticate and codestyle fix errors in implementation to pass tests Fix review notes Remove uneccessary final to align with cb Short circuit way to authorize Simplify error message, make code readably Return error while duplicate key found Delete check for duplicate, checkstyle issues Return duplicate error Fixes gh-7154
This commit is contained in:
committed by
Josh Cummings
parent
d6d0d89ff8
commit
f6c650db47
@@ -23,9 +23,8 @@ import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* @author Joe Grandja
|
||||
@@ -64,10 +63,13 @@ final class ObjectToListStringConverter implements ConditionalGenericConverter {
|
||||
}
|
||||
}
|
||||
if (source instanceof Collection) {
|
||||
return ((Collection<?>) source).stream()
|
||||
.filter(Objects::nonNull)
|
||||
.map(Objects::toString)
|
||||
.collect(Collectors.toList());
|
||||
Collection<String> results = new ArrayList<>();
|
||||
for (Object object : ((Collection<?>) source)) {
|
||||
if (object != null) {
|
||||
results.add(object.toString());
|
||||
}
|
||||
}
|
||||
return results;
|
||||
}
|
||||
return Collections.singletonList(source.toString());
|
||||
}
|
||||
|
||||
@@ -26,13 +26,11 @@ import org.springframework.web.util.UriComponentsBuilder;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* A representation of an OAuth 2.0 Authorization Request
|
||||
@@ -275,8 +273,7 @@ public final class OAuth2AuthorizationRequest implements Serializable {
|
||||
*/
|
||||
public Builder scope(String... scope) {
|
||||
if (scope != null && scope.length > 0) {
|
||||
return this.scopes(Arrays.stream(scope).collect(
|
||||
Collectors.toCollection(LinkedHashSet::new)));
|
||||
return this.scopes(toLinkedHashSet(scope));
|
||||
}
|
||||
return this;
|
||||
}
|
||||
@@ -401,5 +398,11 @@ public final class OAuth2AuthorizationRequest implements Serializable {
|
||||
.build()
|
||||
.toUriString();
|
||||
}
|
||||
|
||||
private LinkedHashSet<String> toLinkedHashSet(String... scope) {
|
||||
LinkedHashSet<String> result = new LinkedHashSet<>();
|
||||
Collections.addAll(result, scope);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,14 +37,13 @@ import java.nio.charset.Charset;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.time.Instant;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* A {@link HttpMessageConverter} for an {@link OAuth2AccessTokenResponse OAuth 2.0 Access Token Response}.
|
||||
@@ -132,12 +131,13 @@ public class OAuth2AccessTokenResponseHttpMessageConverter extends AbstractHttpM
|
||||
* OAuth 2.0 Access Token Response parameters to an {@link OAuth2AccessTokenResponse}.
|
||||
*/
|
||||
private static class OAuth2AccessTokenResponseConverter implements Converter<Map<String, String>, OAuth2AccessTokenResponse> {
|
||||
private static final Set<String> TOKEN_RESPONSE_PARAMETER_NAMES = Stream.of(
|
||||
private static final Set<String> TOKEN_RESPONSE_PARAMETER_NAMES = new HashSet<>(Arrays.asList(
|
||||
OAuth2ParameterNames.ACCESS_TOKEN,
|
||||
OAuth2ParameterNames.TOKEN_TYPE,
|
||||
OAuth2ParameterNames.EXPIRES_IN,
|
||||
OAuth2ParameterNames.REFRESH_TOKEN,
|
||||
OAuth2ParameterNames.SCOPE).collect(Collectors.toSet());
|
||||
OAuth2ParameterNames.SCOPE
|
||||
));
|
||||
|
||||
@Override
|
||||
public OAuth2AccessTokenResponse convert(Map<String, String> tokenResponseParameters) {
|
||||
@@ -159,15 +159,17 @@ public class OAuth2AccessTokenResponseHttpMessageConverter extends AbstractHttpM
|
||||
Set<String> scopes = Collections.emptySet();
|
||||
if (tokenResponseParameters.containsKey(OAuth2ParameterNames.SCOPE)) {
|
||||
String scope = tokenResponseParameters.get(OAuth2ParameterNames.SCOPE);
|
||||
scopes = Arrays.stream(StringUtils.delimitedListToStringArray(scope, " ")).collect(Collectors.toSet());
|
||||
scopes = new HashSet<>(Arrays.asList(StringUtils.delimitedListToStringArray(scope, " ")));
|
||||
}
|
||||
|
||||
String refreshToken = tokenResponseParameters.get(OAuth2ParameterNames.REFRESH_TOKEN);
|
||||
|
||||
Map<String, Object> additionalParameters = new LinkedHashMap<>();
|
||||
tokenResponseParameters.entrySet().stream()
|
||||
.filter(e -> !TOKEN_RESPONSE_PARAMETER_NAMES.contains(e.getKey()))
|
||||
.forEach(e -> additionalParameters.put(e.getKey(), e.getValue()));
|
||||
for (Map.Entry<String, String> entry : tokenResponseParameters.entrySet()) {
|
||||
if (!TOKEN_RESPONSE_PARAMETER_NAMES.contains(entry.getKey())) {
|
||||
additionalParameters.put(entry.getKey(), entry.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
return OAuth2AccessTokenResponse.withToken(accessToken)
|
||||
.tokenType(accessTokenType)
|
||||
@@ -205,8 +207,9 @@ public class OAuth2AccessTokenResponseHttpMessageConverter extends AbstractHttpM
|
||||
parameters.put(OAuth2ParameterNames.REFRESH_TOKEN, tokenResponse.getRefreshToken().getTokenValue());
|
||||
}
|
||||
if (!CollectionUtils.isEmpty(tokenResponse.getAdditionalParameters())) {
|
||||
tokenResponse.getAdditionalParameters().entrySet().stream()
|
||||
.forEach(e -> parameters.put(e.getKey(), e.getValue().toString()));
|
||||
for (Map.Entry<String, Object> entry : tokenResponse.getAdditionalParameters().entrySet()) {
|
||||
parameters.put(entry.getKey(), entry.getValue().toString());
|
||||
}
|
||||
}
|
||||
|
||||
return parameters;
|
||||
|
||||
@@ -20,16 +20,15 @@ import org.springframework.security.core.SpringSecurityCoreVersion;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.SortedSet;
|
||||
import java.util.Collections;
|
||||
import java.util.Collection;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.TreeSet;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.SortedSet;
|
||||
import java.util.Comparator;
|
||||
import java.util.LinkedHashSet;
|
||||
|
||||
/**
|
||||
* The default implementation of an {@link OAuth2User}.
|
||||
@@ -43,8 +42,8 @@ import java.util.stream.Collectors;
|
||||
* and returning it from {@link #getName()}.
|
||||
*
|
||||
* @author Joe Grandja
|
||||
* @since 5.0
|
||||
* @see OAuth2User
|
||||
* @since 5.0
|
||||
*/
|
||||
public class DefaultOAuth2User implements OAuth2User, Serializable {
|
||||
private static final long serialVersionUID = SpringSecurityCoreVersion.SERIAL_VERSION_UID;
|
||||
@@ -55,8 +54,8 @@ public class DefaultOAuth2User implements OAuth2User, Serializable {
|
||||
/**
|
||||
* Constructs a {@code DefaultOAuth2User} using the provided parameters.
|
||||
*
|
||||
* @param authorities the authorities granted to the user
|
||||
* @param attributes the attributes about the user
|
||||
* @param authorities the authorities granted to the user
|
||||
* @param attributes the attributes about the user
|
||||
* @param nameAttributeKey the key used to access the user's "name" from {@link #getAttributes()}
|
||||
*/
|
||||
public DefaultOAuth2User(Collection<? extends GrantedAuthority> authorities, Map<String, Object> attributes, String nameAttributeKey) {
|
||||
@@ -88,7 +87,7 @@ public class DefaultOAuth2User implements OAuth2User, Serializable {
|
||||
|
||||
private Set<GrantedAuthority> sortAuthorities(Collection<? extends GrantedAuthority> authorities) {
|
||||
SortedSet<GrantedAuthority> sortedAuthorities =
|
||||
new TreeSet<>(Comparator.comparing(GrantedAuthority::getAuthority));
|
||||
new TreeSet<>(Comparator.comparing(GrantedAuthority::getAuthority));
|
||||
sortedAuthorities.addAll(authorities);
|
||||
return sortedAuthorities;
|
||||
}
|
||||
@@ -127,9 +126,9 @@ public class DefaultOAuth2User implements OAuth2User, Serializable {
|
||||
sb.append("Name: [");
|
||||
sb.append(this.getName());
|
||||
sb.append("], Granted Authorities: [");
|
||||
sb.append(this.getAuthorities().stream().map(GrantedAuthority::getAuthority).collect(Collectors.joining(", ")));
|
||||
sb.append(getAuthorities());
|
||||
sb.append("], User Attributes: [");
|
||||
sb.append(this.getAttributes().entrySet().stream().map(e -> e.getKey() + "=" + e.getValue()).collect(Collectors.joining(", ")));
|
||||
sb.append(getAttributes());
|
||||
sb.append("]");
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user