Skip to content

Commit 3229bfa

Browse files
stillyasjohnr
authored andcommitted
Add empty authorities by default
Closes gh-12533
1 parent 6abbdd3 commit 3229bfa

File tree

2 files changed

+35
-2
lines changed
  • core/src
    • main/java/org/springframework/security/core/userdetails
    • test/java/org/springframework/security/core/userdetails

2 files changed

+35
-2
lines changed

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,7 @@ public static final class UserBuilder {
329329

330330
private String password;
331331

332-
private List<GrantedAuthority> authorities;
332+
private List<GrantedAuthority> authorities = new ArrayList<>();
333333

334334
private boolean accountExpired;
335335

@@ -427,6 +427,7 @@ public UserBuilder roles(String... roles) {
427427
* @see #roles(String...)
428428
*/
429429
public UserBuilder authorities(GrantedAuthority... authorities) {
430+
Assert.notNull(authorities, "authorities cannot be null");
430431
return authorities(Arrays.asList(authorities));
431432
}
432433

@@ -439,7 +440,8 @@ public UserBuilder authorities(GrantedAuthority... authorities) {
439440
* @see #roles(String...)
440441
*/
441442
public UserBuilder authorities(Collection<? extends GrantedAuthority> authorities) {
442-
this.authorities = new ArrayList<>(authorities);
443+
Assert.notNull(authorities, "authorities cannot be null");
444+
this.authorities.addAll(authorities);
443445
return this;
444446
}
445447

@@ -452,6 +454,7 @@ public UserBuilder authorities(Collection<? extends GrantedAuthority> authoritie
452454
* @see #roles(String...)
453455
*/
454456
public UserBuilder authorities(String... authorities) {
457+
Assert.notNull(authorities, "authorities cannot be null");
455458
return authorities(AuthorityUtils.createAuthorityList(authorities));
456459
}
457460

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

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
import java.io.ByteArrayOutputStream;
2020
import java.io.ObjectOutputStream;
21+
import java.util.ArrayList;
22+
import java.util.Collection;
2123
import java.util.HashSet;
2224
import java.util.List;
2325
import java.util.Set;
@@ -37,6 +39,7 @@
3739
* Tests {@link User}.
3840
*
3941
* @author Ben Alex
42+
* @author Ilya Starchenko
4043
*/
4144
public class UserTests {
4245

@@ -68,6 +71,33 @@ public void testNoArgConstructorDoesntExist() {
6871
.isThrownBy(() -> User.class.getDeclaredConstructor((Class[]) null));
6972
}
7073

74+
@Test
75+
public void testBuildUserWithNoAuthorities() {
76+
UserDetails user = User.builder().username("user").password("password").build();
77+
assertThat(user.getAuthorities()).isEmpty();
78+
}
79+
80+
@Test
81+
public void testNullWithinUserAuthoritiesIsRejected() {
82+
assertThatIllegalArgumentException().isThrownBy(() -> User.builder().username("user").password("password")
83+
.authorities((Collection<? extends GrantedAuthority>) null).build());
84+
List<GrantedAuthority> authorities = new ArrayList<>();
85+
authorities.add(null);
86+
authorities.add(null);
87+
assertThatIllegalArgumentException().isThrownBy(
88+
() -> User.builder().username("user").password("password").authorities(authorities).build());
89+
90+
assertThatIllegalArgumentException().isThrownBy(() -> User.builder().username("user").password("password")
91+
.authorities((GrantedAuthority[]) null).build());
92+
assertThatIllegalArgumentException().isThrownBy(() -> User.builder().username("user").password("password")
93+
.authorities(new GrantedAuthority[] { null, null }).build());
94+
95+
assertThatIllegalArgumentException().isThrownBy(
96+
() -> User.builder().username("user").password("password").authorities((String[]) null).build());
97+
assertThatIllegalArgumentException().isThrownBy(() -> User.builder().username("user").password("password")
98+
.authorities(new String[] { null, null }).build());
99+
}
100+
71101
@Test
72102
public void testNullValuesRejected() {
73103
assertThatIllegalArgumentException().isThrownBy(() -> new User(null, "koala", true, true, true, true, ROLE_12));

0 commit comments

Comments
 (0)