mirror of
				https://github.com/spring-projects/spring-security.git
				synced 2025-10-30 22:28:46 +00:00 
			
		
		
		
	SEC-177: Add hashCode() method.
This commit is contained in:
		
							parent
							
								
									c9cee6651c
								
							
						
					
					
						commit
						74de83e5f1
					
				| @ -1,4 +1,4 @@ | ||||
| /* Copyright 2004, 2005 Acegi Technology Pty Limited | ||||
| /* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
| @ -16,256 +16,272 @@ | ||||
| package org.acegisecurity.userdetails; | ||||
| 
 | ||||
| import org.acegisecurity.GrantedAuthority; | ||||
| 
 | ||||
| import org.springframework.util.Assert; | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * Models core user information retieved by an {@link UserDetailsService}. | ||||
|  *  | ||||
|  * <p> | ||||
|  * Implemented with value object semantics (immutable after construction, like a | ||||
|  * <code>String</code>). Developers may use this class directly, subclass it, | ||||
|  * or write their own {@link UserDetails} implementation from scratch. | ||||
|  * Implemented with value object semantics (immutable after construction, like | ||||
|  * a <code>String</code>). Developers may use this class directly, subclass | ||||
|  * it, or write their own {@link UserDetails} implementation from scratch. | ||||
|  * </p> | ||||
|  * | ||||
|  * @author Ben Alex | ||||
|  * @version $Id$ | ||||
|  */ | ||||
| public class User implements UserDetails { | ||||
| 	// ~ Instance fields | ||||
| 	// ======================================================== | ||||
|     //~ Instance fields ======================================================== | ||||
| 
 | ||||
| 	private String password; | ||||
|     // ~ Instance fields | ||||
|     // ======================================================== | ||||
|     private String password; | ||||
|     private String username; | ||||
|     private GrantedAuthority[] authorities; | ||||
|     private boolean accountNonExpired; | ||||
|     private boolean accountNonLocked; | ||||
|     private boolean credentialsNonExpired; | ||||
|     private boolean enabled; | ||||
| 
 | ||||
| 	private String username; | ||||
|     //~ Constructors =========================================================== | ||||
| 
 | ||||
| 	private GrantedAuthority[] authorities; | ||||
|     // ~ Constructors | ||||
|     // =========================================================== | ||||
|     protected User() { | ||||
|         throw new IllegalArgumentException("Cannot use default constructor"); | ||||
|     } | ||||
| 
 | ||||
| 	private boolean accountNonExpired; | ||||
|     /** | ||||
|      * Construct the <code>User</code> with the details required by {@link | ||||
|      * DaoAuthenticationProvider}. | ||||
|      * | ||||
|      * @param username the username presented to the | ||||
|      *        <code>DaoAuthenticationProvider</code> | ||||
|      * @param password the password that should be presented to the | ||||
|      *        <code>DaoAuthenticationProvider</code> | ||||
|      * @param enabled set to <code>true</code> if the user is enabled | ||||
|      * @param authorities the authorities that should be granted to the caller | ||||
|      *        if they presented the correct username and password and the user | ||||
|      *        is enabled | ||||
|      * | ||||
|      * @throws IllegalArgumentException if a <code>null</code> value was passed | ||||
|      *         either as a parameter or as an element in the | ||||
|      *         <code>GrantedAuthority[]</code> array | ||||
|      * | ||||
|      * @deprecated use new constructor with extended properties (this | ||||
|      *             constructor will be removed from release 1.0.0) | ||||
|      */ | ||||
|     public User(String username, String password, boolean enabled, | ||||
|         GrantedAuthority[] authorities) throws IllegalArgumentException { | ||||
|         this(username, password, enabled, true, true, authorities); | ||||
|     } | ||||
| 
 | ||||
| 	private boolean accountNonLocked; | ||||
|     /** | ||||
|      * Construct the <code>User</code> with the details required by {@link | ||||
|      * DaoAuthenticationProvider}. | ||||
|      * | ||||
|      * @param username the username presented to the | ||||
|      *        <code>DaoAuthenticationProvider</code> | ||||
|      * @param password the password that should be presented to the | ||||
|      *        <code>DaoAuthenticationProvider</code> | ||||
|      * @param enabled set to <code>true</code> if the user is enabled | ||||
|      * @param accountNonExpired set to <code>true</code> if the account has not | ||||
|      *        expired | ||||
|      * @param credentialsNonExpired set to <code>true</code> if the credentials | ||||
|      *        have not expired | ||||
|      * @param authorities the authorities that should be granted to the caller | ||||
|      *        if they presented the correct username and password and the user | ||||
|      *        is enabled | ||||
|      * | ||||
|      * @throws IllegalArgumentException if a <code>null</code> value was passed | ||||
|      *         either as a parameter or as an element in the | ||||
|      *         <code>GrantedAuthority[]</code> array | ||||
|      * | ||||
|      * @deprecated use new constructor with extended properties (this | ||||
|      *             constructor will be removed from release 1.0.0) | ||||
|      */ | ||||
|     public User(String username, String password, boolean enabled, | ||||
|         boolean accountNonExpired, boolean credentialsNonExpired, | ||||
|         GrantedAuthority[] authorities) throws IllegalArgumentException { | ||||
|         this(username, password, enabled, accountNonExpired, | ||||
|             credentialsNonExpired, true, authorities); | ||||
|     } | ||||
| 
 | ||||
| 	private boolean credentialsNonExpired; | ||||
|     /** | ||||
|      * Construct the <code>User</code> with the details required by {@link | ||||
|      * DaoAuthenticationProvider}. | ||||
|      * | ||||
|      * @param username the username presented to the | ||||
|      *        <code>DaoAuthenticationProvider</code> | ||||
|      * @param password the password that should be presented to the | ||||
|      *        <code>DaoAuthenticationProvider</code> | ||||
|      * @param enabled set to <code>true</code> if the user is enabled | ||||
|      * @param accountNonExpired set to <code>true</code> if the account has not | ||||
|      *        expired | ||||
|      * @param credentialsNonExpired set to <code>true</code> if the credentials | ||||
|      *        have not expired | ||||
|      * @param accountNonLocked set to <code>true</code> if the account is not | ||||
|      *        locked | ||||
|      * @param authorities the authorities that should be granted to the caller | ||||
|      *        if they presented the correct username and password and the user | ||||
|      *        is enabled | ||||
|      * | ||||
|      * @throws IllegalArgumentException if a <code>null</code> value was passed | ||||
|      *         either as a parameter or as an element in the | ||||
|      *         <code>GrantedAuthority[]</code> array | ||||
|      */ | ||||
|     public User(String username, String password, boolean enabled, | ||||
|         boolean accountNonExpired, boolean credentialsNonExpired, | ||||
|         boolean accountNonLocked, GrantedAuthority[] authorities) | ||||
|         throws IllegalArgumentException { | ||||
|         if (((username == null) || "".equals(username)) || (password == null)) { | ||||
|             throw new IllegalArgumentException( | ||||
|                 "Cannot pass null or empty values to constructor"); | ||||
|         } | ||||
| 
 | ||||
| 	private boolean enabled; | ||||
|         this.username = username; | ||||
|         this.password = password; | ||||
|         this.enabled = enabled; | ||||
|         this.accountNonExpired = accountNonExpired; | ||||
|         this.credentialsNonExpired = credentialsNonExpired; | ||||
|         this.accountNonLocked = accountNonLocked; | ||||
|         setAuthorities(authorities); | ||||
|     } | ||||
| 
 | ||||
| 	// ~ Constructors | ||||
| 	// =========================================================== | ||||
|     //~ Methods ================================================================ | ||||
| 
 | ||||
| 	protected User() { | ||||
| 		throw new IllegalArgumentException("Cannot use default constructor"); | ||||
| 	} | ||||
|     public boolean equals(Object rhs) { | ||||
|         if (!(rhs instanceof User) || (rhs == null)) { | ||||
|             return false; | ||||
|         } | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Construct the <code>User</code> with the details required by {@link | ||||
| 	 * DaoAuthenticationProvider}. | ||||
| 	 *  | ||||
| 	 * @param username | ||||
| 	 *            the username presented to the | ||||
| 	 *            <code>DaoAuthenticationProvider</code> | ||||
| 	 * @param password | ||||
| 	 *            the password that should be presented to the | ||||
| 	 *            <code>DaoAuthenticationProvider</code> | ||||
| 	 * @param enabled | ||||
| 	 *            set to <code>true</code> if the user is enabled | ||||
| 	 * @param authorities | ||||
| 	 *            the authorities that should be granted to the caller if they | ||||
| 	 *            presented the correct username and password and the user is | ||||
| 	 *            enabled | ||||
| 	 *  | ||||
| 	 * @throws IllegalArgumentException | ||||
| 	 *             if a <code>null</code> value was passed either as a | ||||
| 	 *             parameter or as an element in the | ||||
| 	 *             <code>GrantedAuthority[]</code> array | ||||
| 	 *  | ||||
| 	 * @deprecated use new constructor with extended properties (this | ||||
| 	 *             constructor will be removed from release 1.0.0) | ||||
| 	 */ | ||||
| 	public User(String username, String password, boolean enabled, | ||||
| 			GrantedAuthority[] authorities) throws IllegalArgumentException { | ||||
| 		this(username, password, enabled, true, true, authorities); | ||||
| 	} | ||||
|         User user = (User) rhs; | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Construct the <code>User</code> with the details required by {@link | ||||
| 	 * DaoAuthenticationProvider}. | ||||
| 	 *  | ||||
| 	 * @param username | ||||
| 	 *            the username presented to the | ||||
| 	 *            <code>DaoAuthenticationProvider</code> | ||||
| 	 * @param password | ||||
| 	 *            the password that should be presented to the | ||||
| 	 *            <code>DaoAuthenticationProvider</code> | ||||
| 	 * @param enabled | ||||
| 	 *            set to <code>true</code> if the user is enabled | ||||
| 	 * @param accountNonExpired | ||||
| 	 *            set to <code>true</code> if the account has not expired | ||||
| 	 * @param credentialsNonExpired | ||||
| 	 *            set to <code>true</code> if the credentials have not expired | ||||
| 	 * @param authorities | ||||
| 	 *            the authorities that should be granted to the caller if they | ||||
| 	 *            presented the correct username and password and the user is | ||||
| 	 *            enabled | ||||
| 	 *  | ||||
| 	 * @throws IllegalArgumentException | ||||
| 	 *             if a <code>null</code> value was passed either as a | ||||
| 	 *             parameter or as an element in the | ||||
| 	 *             <code>GrantedAuthority[]</code> array | ||||
| 	 *  | ||||
| 	 * @deprecated use new constructor with extended properties (this | ||||
| 	 *             constructor will be removed from release 1.0.0) | ||||
| 	 */ | ||||
| 	public User(String username, String password, boolean enabled, | ||||
| 			boolean accountNonExpired, boolean credentialsNonExpired, | ||||
| 			GrantedAuthority[] authorities) throws IllegalArgumentException { | ||||
| 		this(username, password, enabled, accountNonExpired, | ||||
| 				credentialsNonExpired, true, authorities); | ||||
| 	} | ||||
|         // We rely on constructor to guarantee any User has non-null and >0 | ||||
|         // authorities | ||||
|         if (user.getAuthorities().length != this.getAuthorities().length) { | ||||
|             return false; | ||||
|         } | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Construct the <code>User</code> with the details required by {@link | ||||
| 	 * DaoAuthenticationProvider}. | ||||
| 	 *  | ||||
| 	 * @param username | ||||
| 	 *            the username presented to the | ||||
| 	 *            <code>DaoAuthenticationProvider</code> | ||||
| 	 * @param password | ||||
| 	 *            the password that should be presented to the | ||||
| 	 *            <code>DaoAuthenticationProvider</code> | ||||
| 	 * @param enabled | ||||
| 	 *            set to <code>true</code> if the user is enabled | ||||
| 	 * @param accountNonExpired | ||||
| 	 *            set to <code>true</code> if the account has not expired | ||||
| 	 * @param credentialsNonExpired | ||||
| 	 *            set to <code>true</code> if the credentials have not expired | ||||
| 	 * @param accountNonLocked | ||||
| 	 *            set to <code>true</code> if the account is not locked | ||||
| 	 * @param authorities | ||||
| 	 *            the authorities that should be granted to the caller if they | ||||
| 	 *            presented the correct username and password and the user is | ||||
| 	 *            enabled | ||||
| 	 *  | ||||
| 	 * @throws IllegalArgumentException | ||||
| 	 *             if a <code>null</code> value was passed either as a | ||||
| 	 *             parameter or as an element in the | ||||
| 	 *             <code>GrantedAuthority[]</code> array | ||||
| 	 */ | ||||
| 	public User(String username, String password, boolean enabled, | ||||
| 			boolean accountNonExpired, boolean credentialsNonExpired, | ||||
| 			boolean accountNonLocked, GrantedAuthority[] authorities) | ||||
| 			throws IllegalArgumentException { | ||||
| 		if (((username == null) || "".equals(username)) || (password == null)) { | ||||
| 			throw new IllegalArgumentException( | ||||
| 					"Cannot pass null or empty values to constructor"); | ||||
| 		} | ||||
|         for (int i = 0; i < this.getAuthorities().length; i++) { | ||||
|             if (!this.getAuthorities()[i].equals(user.getAuthorities()[i])) { | ||||
|                 return false; | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
| 		this.username = username; | ||||
| 		this.password = password; | ||||
| 		this.enabled = enabled; | ||||
| 		this.accountNonExpired = accountNonExpired; | ||||
| 		this.credentialsNonExpired = credentialsNonExpired; | ||||
| 		this.accountNonLocked = accountNonLocked; | ||||
| 		setAuthorities(authorities); | ||||
| 	} | ||||
|         // We rely on constructor to guarantee non-null username and password | ||||
|         return (this.getPassword().equals(user.getPassword()) | ||||
|         && this.getUsername().equals(user.getUsername()) | ||||
|         && (this.isAccountNonExpired() == user.isAccountNonExpired()) | ||||
|         && (this.isAccountNonLocked() == user.isAccountNonLocked()) | ||||
|         && (this.isCredentialsNonExpired() == user.isCredentialsNonExpired()) | ||||
|         && (this.isEnabled() == user.isEnabled())); | ||||
|     } | ||||
| 
 | ||||
| 	// ~ Methods | ||||
| 	// ================================================================ | ||||
|     public GrantedAuthority[] getAuthorities() { | ||||
|         return authorities; | ||||
|     } | ||||
| 
 | ||||
| 	public boolean equals(Object rhs) { | ||||
| 		if (!(rhs instanceof User) || (rhs == null)) { | ||||
| 			return false; | ||||
| 		} | ||||
|     public String getPassword() { | ||||
|         return password; | ||||
|     } | ||||
| 
 | ||||
| 		User user = (User) rhs; | ||||
|     public String getUsername() { | ||||
|         return username; | ||||
|     } | ||||
| 
 | ||||
| 		// We rely on constructor to guarantee any User has non-null and >0 | ||||
| 		// authorities | ||||
| 		if (user.getAuthorities().length != this.getAuthorities().length) { | ||||
| 			return false; | ||||
| 		} | ||||
|     // ~ Methods | ||||
|     // ================================================================ | ||||
|     public int hashCode() { | ||||
|         int code = 9792; | ||||
| 
 | ||||
| 		for (int i = 0; i < this.getAuthorities().length; i++) { | ||||
| 			if (!this.getAuthorities()[i].equals(user.getAuthorities()[i])) { | ||||
| 				return false; | ||||
| 			} | ||||
| 		} | ||||
|         if (this.getAuthorities() != null) { | ||||
|             for (int i = 0; i < this.getAuthorities().length; i++) { | ||||
|                 code = code * (this.getAuthorities()[i].hashCode() % 7); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
| 		// We rely on constructor to guarantee non-null username and password | ||||
| 		return (this.getPassword().equals(user.getPassword()) | ||||
| 				&& this.getUsername().equals(user.getUsername()) | ||||
| 				&& (this.isAccountNonExpired() == user.isAccountNonExpired()) | ||||
| 				&& (this.isAccountNonLocked() == user.isAccountNonLocked()) | ||||
| 				&& (this.isCredentialsNonExpired() == user | ||||
| 						.isCredentialsNonExpired()) && (this.isEnabled() == user | ||||
| 				.isEnabled())); | ||||
| 	} | ||||
|         if (this.getPassword() != null) { | ||||
|             code = code * (this.getPassword().hashCode() % 7); | ||||
|         } | ||||
| 
 | ||||
| 	public GrantedAuthority[] getAuthorities() { | ||||
| 		return authorities; | ||||
| 	} | ||||
|         if (this.getUsername() != null) { | ||||
|             code = code * (this.getUsername().hashCode() % 7); | ||||
|         } | ||||
| 
 | ||||
| 	public String getPassword() { | ||||
| 		return password; | ||||
| 	} | ||||
|         if (this.isAccountNonExpired()) { | ||||
|             code = code * -2; | ||||
|         } | ||||
| 
 | ||||
| 	public String getUsername() { | ||||
| 		return username; | ||||
| 	} | ||||
|         if (this.isAccountNonLocked()) { | ||||
|             code = code * -3; | ||||
|         } | ||||
| 
 | ||||
| 	public boolean isAccountNonExpired() { | ||||
| 		return accountNonExpired; | ||||
| 	} | ||||
|         if (this.isCredentialsNonExpired()) { | ||||
|             code = code * -5; | ||||
|         } | ||||
| 
 | ||||
| 	public boolean isAccountNonLocked() { | ||||
| 		return this.accountNonLocked; | ||||
| 	} | ||||
|         if (this.isEnabled()) { | ||||
|             code = code * -7; | ||||
|         } | ||||
| 
 | ||||
| 	public boolean isCredentialsNonExpired() { | ||||
| 		return credentialsNonExpired; | ||||
| 	} | ||||
|         return code; | ||||
|     } | ||||
| 
 | ||||
| 	public boolean isEnabled() { | ||||
| 		return enabled; | ||||
| 	} | ||||
|     public boolean isAccountNonExpired() { | ||||
|         return accountNonExpired; | ||||
|     } | ||||
| 
 | ||||
| 	protected void setAuthorities(GrantedAuthority[] authorities) { | ||||
| 		Assert.notNull(authorities, | ||||
|                 "Cannot pass a null GrantedAuthority array"); | ||||
|     public boolean isAccountNonLocked() { | ||||
|         return this.accountNonLocked; | ||||
|     } | ||||
| 
 | ||||
| 		for (int i = 0; i < authorities.length; i++) { | ||||
| 			Assert.notNull( authorities[i], | ||||
|                     "Granted authority element " | ||||
|                     + i | ||||
| 					+ " is null - GrantedAuthority[] cannot contain any null elements"); | ||||
| 		} | ||||
|     public boolean isCredentialsNonExpired() { | ||||
|         return credentialsNonExpired; | ||||
|     } | ||||
| 
 | ||||
| 		this.authorities = authorities; | ||||
| 	} | ||||
|     public boolean isEnabled() { | ||||
|         return enabled; | ||||
|     } | ||||
| 
 | ||||
| 	public String toString() { | ||||
| 		StringBuffer sb = new StringBuffer(); | ||||
| 		sb.append(super.toString() + ": "); | ||||
| 		sb.append("Username: " + this.username + "; "); | ||||
| 		sb.append("Password: [PROTECTED]; "); | ||||
| 		sb.append("Enabled: " + this.enabled + "; "); | ||||
| 		sb.append("AccountNonExpired: " + this.accountNonExpired + "; "); | ||||
| 		sb.append("credentialsNonExpired: " + this.credentialsNonExpired | ||||
| 						+ "; "); | ||||
| 		sb.append("AccountNonLocked: " + this.accountNonLocked + "; "); | ||||
|     protected void setAuthorities(GrantedAuthority[] authorities) { | ||||
|         Assert.notNull(authorities, "Cannot pass a null GrantedAuthority array"); | ||||
| 
 | ||||
| 		if (this.getAuthorities() != null) { | ||||
| 			sb.append("Granted Authorities: "); | ||||
|         for (int i = 0; i < authorities.length; i++) { | ||||
|             Assert.notNull(authorities[i], | ||||
|                 "Granted authority element " + i | ||||
|                 + " is null - GrantedAuthority[] cannot contain any null elements"); | ||||
|         } | ||||
| 
 | ||||
| 			for (int i = 0; i < this.getAuthorities().length; i++) { | ||||
| 				if (i > 0) { | ||||
| 					sb.append(", "); | ||||
| 				} | ||||
|         this.authorities = authorities; | ||||
|     } | ||||
| 
 | ||||
| 				sb.append(this.getAuthorities()[i].toString()); | ||||
| 			} | ||||
| 		} else { | ||||
| 			sb.append("Not granted any authorities"); | ||||
| 		} | ||||
|     public String toString() { | ||||
|         StringBuffer sb = new StringBuffer(); | ||||
|         sb.append(super.toString() + ": "); | ||||
|         sb.append("Username: " + this.username + "; "); | ||||
|         sb.append("Password: [PROTECTED]; "); | ||||
|         sb.append("Enabled: " + this.enabled + "; "); | ||||
|         sb.append("AccountNonExpired: " + this.accountNonExpired + "; "); | ||||
|         sb.append("credentialsNonExpired: " + this.credentialsNonExpired + "; "); | ||||
|         sb.append("AccountNonLocked: " + this.accountNonLocked + "; "); | ||||
| 
 | ||||
| 		return sb.toString(); | ||||
| 	} | ||||
|         if (this.getAuthorities() != null) { | ||||
|             sb.append("Granted Authorities: "); | ||||
| 
 | ||||
|             for (int i = 0; i < this.getAuthorities().length; i++) { | ||||
|                 if (i > 0) { | ||||
|                     sb.append(", "); | ||||
|                 } | ||||
| 
 | ||||
|                 sb.append(this.getAuthorities()[i].toString()); | ||||
|             } | ||||
|         } else { | ||||
|             sb.append("Not granted any authorities"); | ||||
|         } | ||||
| 
 | ||||
|         return sb.toString(); | ||||
|     } | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user