mirror of
https://github.com/spring-projects/spring-security.git
synced 2025-06-13 23:52:14 +00:00
SEC-1483: Change User constructor to use a generic wildcard for authorities collection.
This commit is contained in:
parent
304f12fb63
commit
295e0ded18
@ -81,7 +81,7 @@ public class User implements UserDetails {
|
|||||||
* <code>GrantedAuthority</code> collection
|
* <code>GrantedAuthority</code> collection
|
||||||
*/
|
*/
|
||||||
public User(String username, String password, boolean enabled, boolean accountNonExpired,
|
public User(String username, String password, boolean enabled, boolean accountNonExpired,
|
||||||
boolean credentialsNonExpired, boolean accountNonLocked, Collection<GrantedAuthority> authorities) {
|
boolean credentialsNonExpired, boolean accountNonLocked, Collection<? extends GrantedAuthority> authorities) {
|
||||||
|
|
||||||
if (((username == null) || "".equals(username)) || (password == null)) {
|
if (((username == null) || "".equals(username)) || (password == null)) {
|
||||||
throw new IllegalArgumentException("Cannot pass null or empty values to constructor");
|
throw new IllegalArgumentException("Cannot pass null or empty values to constructor");
|
||||||
@ -98,6 +98,65 @@ public class User implements UserDetails {
|
|||||||
|
|
||||||
//~ Methods ========================================================================================================
|
//~ Methods ========================================================================================================
|
||||||
|
|
||||||
|
public Collection<GrantedAuthority> getAuthorities() {
|
||||||
|
return authorities;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPassword() {
|
||||||
|
return password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUsername() {
|
||||||
|
return username;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isAccountNonExpired() {
|
||||||
|
return accountNonExpired;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isAccountNonLocked() {
|
||||||
|
return this.accountNonLocked;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isCredentialsNonExpired() {
|
||||||
|
return credentialsNonExpired;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isEnabled() {
|
||||||
|
return enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static SortedSet<GrantedAuthority> sortAuthorities(Collection<? extends GrantedAuthority> authorities) {
|
||||||
|
Assert.notNull(authorities, "Cannot pass a null GrantedAuthority collection");
|
||||||
|
// Ensure array iteration order is predictable (as per UserDetails.getAuthorities() contract and SEC-717)
|
||||||
|
SortedSet<GrantedAuthority> sortedAuthorities =
|
||||||
|
new TreeSet<GrantedAuthority>(new AuthorityComparator());
|
||||||
|
|
||||||
|
for (GrantedAuthority grantedAuthority : authorities) {
|
||||||
|
Assert.notNull(grantedAuthority, "GrantedAuthority list cannot contain any null elements");
|
||||||
|
sortedAuthorities.add(grantedAuthority);
|
||||||
|
}
|
||||||
|
|
||||||
|
return sortedAuthorities;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class AuthorityComparator implements Comparator<GrantedAuthority>, Serializable {
|
||||||
|
public int compare(GrantedAuthority g1, GrantedAuthority g2) {
|
||||||
|
// Neither should ever be null as each entry is checked before adding it to the set.
|
||||||
|
// If the authority is null, it is a custom authority and should precede others.
|
||||||
|
if (g2.getAuthority() == null) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (g1.getAuthority() == null) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return g1.getAuthority().compareTo(g2.getAuthority());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean equals(Object rhs) {
|
public boolean equals(Object rhs) {
|
||||||
if (!(rhs instanceof User) || (rhs == null)) {
|
if (!(rhs instanceof User) || (rhs == null)) {
|
||||||
return false;
|
return false;
|
||||||
@ -119,18 +178,7 @@ public class User implements UserDetails {
|
|||||||
&& (this.isEnabled() == user.isEnabled()));
|
&& (this.isEnabled() == user.isEnabled()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Collection<GrantedAuthority> getAuthorities() {
|
@Override
|
||||||
return authorities;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getPassword() {
|
|
||||||
return password;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getUsername() {
|
|
||||||
return username;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
int code = 9792;
|
int code = 9792;
|
||||||
|
|
||||||
@ -165,53 +213,7 @@ public class User implements UserDetails {
|
|||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isAccountNonExpired() {
|
@Override
|
||||||
return accountNonExpired;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isAccountNonLocked() {
|
|
||||||
return this.accountNonLocked;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isCredentialsNonExpired() {
|
|
||||||
return credentialsNonExpired;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isEnabled() {
|
|
||||||
return enabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static SortedSet<GrantedAuthority> sortAuthorities(Collection<GrantedAuthority> authorities) {
|
|
||||||
Assert.notNull(authorities, "Cannot pass a null GrantedAuthority collection");
|
|
||||||
// Ensure array iteration order is predictable (as per UserDetails.getAuthorities() contract and SEC-717)
|
|
||||||
SortedSet<GrantedAuthority> sortedAuthorities =
|
|
||||||
new TreeSet<GrantedAuthority>(new AuthorityComparator());
|
|
||||||
|
|
||||||
for (GrantedAuthority grantedAuthority : authorities) {
|
|
||||||
Assert.notNull(grantedAuthority, "GrantedAuthority list cannot contain any null elements");
|
|
||||||
sortedAuthorities.add(grantedAuthority);
|
|
||||||
}
|
|
||||||
|
|
||||||
return sortedAuthorities;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class AuthorityComparator implements Comparator<GrantedAuthority>, Serializable {
|
|
||||||
public int compare(GrantedAuthority g1, GrantedAuthority g2) {
|
|
||||||
// Neither should ever be null as each entry is checked before adding it to the set.
|
|
||||||
// If the authority is null, it is a custom authority and should precede others.
|
|
||||||
if (g2.getAuthority() == null) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (g1.getAuthority() == null) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return g1.getAuthority().compareTo(g2.getAuthority());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public String toString() {
|
public String toString() {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
sb.append(super.toString()).append(": ");
|
sb.append(super.toString()).append(": ");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user