Skip to content

Commit 1f04baa

Browse files
author
Steve Riesenberg
committed
Polish gh-13290
Issue gh-12533
1 parent 4def405 commit 1f04baa

File tree

2 files changed

+26
-21
lines changed
  • core/src
    • main/java/org/springframework/security/core/userdetails
    • test/java/org/springframework/security/core/userdetails

2 files changed

+26
-21
lines changed

core/src/main/java/org/springframework/security/core/userdetails/User.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -441,8 +441,7 @@ public UserBuilder authorities(GrantedAuthority... authorities) {
441441
*/
442442
public UserBuilder authorities(Collection<? extends GrantedAuthority> authorities) {
443443
Assert.notNull(authorities, "authorities cannot be null");
444-
this.authorities.clear();
445-
this.authorities.addAll(authorities);
444+
this.authorities = new ArrayList<>(authorities);
446445
return this;
447446
}
448447

core/src/test/java/org/springframework/security/core/userdetails/UserTests.java

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,21 @@
1818

1919
import java.io.ByteArrayOutputStream;
2020
import java.io.ObjectOutputStream;
21-
import java.util.*;
21+
import java.util.ArrayList;
22+
import java.util.Collection;
23+
import java.util.HashSet;
24+
import java.util.List;
25+
import java.util.Set;
2226
import java.util.function.Function;
23-
import java.util.stream.Stream;
2427

2528
import org.junit.jupiter.api.Test;
26-
2729
import org.junit.jupiter.params.ParameterizedTest;
28-
import org.junit.jupiter.params.provider.Arguments;
29-
import org.junit.jupiter.params.provider.MethodSource;
30+
import org.junit.jupiter.params.provider.NullSource;
31+
import org.junit.jupiter.params.provider.ValueSource;
32+
3033
import org.springframework.security.core.GrantedAuthority;
3134
import org.springframework.security.core.authority.AuthorityUtils;
3235
import org.springframework.security.core.authority.SimpleGrantedAuthority;
33-
import org.springframework.util.CollectionUtils;
3436

3537
import static org.assertj.core.api.Assertions.assertThat;
3638
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
@@ -46,14 +48,6 @@ public class UserTests {
4648

4749
private static final List<GrantedAuthority> ROLE_12 = AuthorityUtils.createAuthorityList("ROLE_ONE", "ROLE_TWO");
4850

49-
public static Stream<Arguments> testNewAuthoritiesShouldReplacePreviousAuthorities() {
50-
return Stream.of(
51-
Arguments.of((Object) new String[0]),
52-
Arguments.of((Object) new String[]{"B7", "C12", "role"}),
53-
Arguments.of((Object) new String[]{"A1"})
54-
);
55-
}
56-
5751
@Test
5852
public void equalsReturnsTrueIfUsernamesAreTheSame() {
5953
User user1 = new User("rod", "koala", true, true, true, true, ROLE_12);
@@ -107,16 +101,28 @@ public void testNullWithinUserAuthoritiesIsRejected() {
107101
.authorities(new String[] { null, null }).build());
108102
}
109103

104+
// gh-12533
110105
@ParameterizedTest
111-
@MethodSource
112-
public void testNewAuthoritiesShouldReplacePreviousAuthorities(String[] authorities) {
113-
UserDetails parent = User.builder().username("user").password("password").authorities("A1", "A2", "B1").build();
114-
User.UserBuilder builder = User.withUserDetails(parent).authorities(authorities);
106+
@NullSource
107+
@ValueSource(strings = { "ROLE_USER,ROLE_ADMIN,read", "read" })
108+
public void withUserDetailsWhenAuthoritiesThenOverridesPreviousAuthorities(String arg) {
109+
// @formatter:off
110+
UserDetails parent = User.builder()
111+
.username("user")
112+
.password("password")
113+
.authorities("one", "two", "three")
114+
.build();
115+
// @formatter:on
116+
String[] authorities = (arg != null) ? arg.split(",") : new String[0];
117+
User.UserBuilder builder = User.withUserDetails(parent);
115118
UserDetails user = builder.build();
119+
assertThat(AuthorityUtils.authorityListToSet(user.getAuthorities())).containsOnly("one", "two", "three");
120+
user = builder.authorities(authorities).build();
116121
assertThat(AuthorityUtils.authorityListToSet(user.getAuthorities())).containsOnly(authorities);
117122
user = builder.authorities(AuthorityUtils.createAuthorityList(authorities)).build();
118123
assertThat(AuthorityUtils.authorityListToSet(user.getAuthorities())).containsOnly(authorities);
119-
user = builder.authorities(AuthorityUtils.createAuthorityList(authorities).toArray(GrantedAuthority[]::new)).build();
124+
user = builder.authorities(AuthorityUtils.createAuthorityList(authorities).toArray(GrantedAuthority[]::new))
125+
.build();
120126
assertThat(AuthorityUtils.authorityListToSet(user.getAuthorities())).containsOnly(authorities);
121127
}
122128

0 commit comments

Comments
 (0)