diff --git a/core/src/main/java/org/springframework/security/core/userdetails/User.java b/core/src/main/java/org/springframework/security/core/userdetails/User.java index eb8cb53d85..379d5d9fd4 100644 --- a/core/src/main/java/org/springframework/security/core/userdetails/User.java +++ b/core/src/main/java/org/springframework/security/core/userdetails/User.java @@ -248,6 +248,16 @@ public class User implements UserDetails, CredentialsContainer { return new UserBuilder().username(username); } + public static UserBuilder withUserDetails(UserDetails userDetails) { + return withUsername(userDetails.getUsername()) + .password(userDetails.getPassword()) + .accountExpired(!userDetails.isAccountNonExpired()) + .accountLocked(!userDetails.isAccountNonLocked()) + .authorities(userDetails.getAuthorities()) + .credentialsExpired(!userDetails.isCredentialsNonExpired()) + .disabled(!userDetails.isEnabled()); + } + /** * Builds the user to be added. At minimum the username, password, and authorities * should provided. The remaining attributes have reasonable defaults. @@ -351,7 +361,7 @@ public class User implements UserDetails, CredentialsContainer { * additional attributes for this user) * @see #roles(String...) */ - public UserBuilder authorities(List authorities) { + public UserBuilder authorities(Collection authorities) { this.authorities = new ArrayList(authorities); return this; } diff --git a/core/src/test/java/org/springframework/security/core/userdetails/UserTests.java b/core/src/test/java/org/springframework/security/core/userdetails/UserTests.java index b91fd4da31..e9836a2cfb 100644 --- a/core/src/test/java/org/springframework/security/core/userdetails/UserTests.java +++ b/core/src/test/java/org/springframework/security/core/userdetails/UserTests.java @@ -146,4 +146,35 @@ public class UserTests { out.writeObject(user); out.close(); } + + @Test + public void withUserDetailsWhenAllEnabled() throws Exception { + User expected = new User("rob","pass", true, true, true, true, ROLE_12); + + UserDetails actual = User.withUserDetails(expected).build(); + + assertThat(actual.getUsername()).isEqualTo(expected.getUsername()); + assertThat(actual.getPassword()).isEqualTo(expected.getPassword()); + assertThat(actual.getAuthorities()).isEqualTo(expected.getAuthorities()); + assertThat(actual.isAccountNonExpired()).isEqualTo(expected.isAccountNonExpired()); + assertThat(actual.isAccountNonLocked()).isEqualTo(expected.isAccountNonLocked()); + assertThat(actual.isCredentialsNonExpired()).isEqualTo(expected.isCredentialsNonExpired()); + assertThat(actual.isEnabled()).isEqualTo(expected.isEnabled()); + } + + + @Test + public void withUserDetailsWhenAllDisabled() throws Exception { + User expected = new User("rob","pass", false, false, false, false, ROLE_12); + + UserDetails actual = User.withUserDetails(expected).build(); + + assertThat(actual.getUsername()).isEqualTo(expected.getUsername()); + assertThat(actual.getPassword()).isEqualTo(expected.getPassword()); + assertThat(actual.getAuthorities()).isEqualTo(expected.getAuthorities()); + assertThat(actual.isAccountNonExpired()).isEqualTo(expected.isAccountNonExpired()); + assertThat(actual.isAccountNonLocked()).isEqualTo(expected.isAccountNonLocked()); + assertThat(actual.isCredentialsNonExpired()).isEqualTo(expected.isCredentialsNonExpired()); + assertThat(actual.isEnabled()).isEqualTo(expected.isEnabled()); + } }