Browse Source

Add UserBuilders.withUserDetails

Rob Winch 8 years ago
parent
commit
051e3fb079

+ 11 - 1
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<? extends GrantedAuthority> authorities) {
+		public UserBuilder authorities(Collection<? extends GrantedAuthority> authorities) {
 			this.authorities = new ArrayList<GrantedAuthority>(authorities);
 			return this;
 		}

+ 31 - 0
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());
+	}
 }