| 
					
				 | 
			
			
				@ -0,0 +1,232 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				package com.yihu.jw.security.core.userdetails; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.security.core.CredentialsContainer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.security.core.GrantedAuthority; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.security.core.authority.AuthorityUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.security.core.authority.SimpleGrantedAuthority; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.security.core.userdetails.User; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.security.core.userdetails.UserDetails; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.util.Assert; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.io.Serializable; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.util.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * Created by progr1mmer on 2018/8/29. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				public class SaltUser implements UserDetails, CredentialsContainer { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private static final long serialVersionUID = 420L; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private String password; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private final String username; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private final Set<GrantedAuthority> authorities; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private final boolean accountNonExpired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private final boolean accountNonLocked; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private final boolean credentialsNonExpired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private final boolean enabled; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private final String salt; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public SaltUser(String username, String password, String salt, Collection<? extends GrantedAuthority> authorities) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        this(username, password, salt, true, true, true, true, authorities); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public SaltUser(String username, String password, String salt, boolean enabled, boolean locked, Collection<? extends GrantedAuthority> authorities) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        this(username, password, salt, enabled, true, true, !locked, authorities); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public SaltUser(String username, String password, String salt, boolean enabled, boolean accountNonExpired, boolean credentialsNonExpired, boolean accountNonLocked, Collection<? extends GrantedAuthority> authorities) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(username != null && !"".equals(username) && password != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            this.username = username; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            this.password = password; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            this.salt = salt; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            this.enabled = enabled; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            this.accountNonExpired = accountNonExpired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            this.credentialsNonExpired = credentialsNonExpired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            this.accountNonLocked = accountNonLocked; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            this.authorities = Collections.unmodifiableSet(sortAuthorities(authorities)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            throw new IllegalArgumentException("Cannot pass null or empty values to constructor"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public Collection<GrantedAuthority> getAuthorities() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return this.authorities; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public String getPassword() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return this.password; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public String getUsername() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return this.username; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public String getSalt() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return salt; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public boolean isEnabled() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return this.enabled; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public boolean isAccountNonExpired() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return this.accountNonExpired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public boolean isAccountNonLocked() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return this.accountNonLocked; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public boolean isCredentialsNonExpired() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return this.credentialsNonExpired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public void eraseCredentials() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        this.password = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private static SortedSet<GrantedAuthority> sortAuthorities(Collection<? extends GrantedAuthority> authorities) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Assert.notNull(authorities, "Cannot pass a null GrantedAuthority collection"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        SortedSet<GrantedAuthority> sortedAuthorities = new TreeSet(new SaltUser.AuthorityComparator()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Iterator var2 = authorities.iterator(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        while(var2.hasNext()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            GrantedAuthority grantedAuthority = (GrantedAuthority)var2.next(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            Assert.notNull(grantedAuthority, "GrantedAuthority list cannot contain any null elements"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            sortedAuthorities.add(grantedAuthority); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return sortedAuthorities; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public boolean equals(Object rhs) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return rhs instanceof SaltUser ?this.username.equals(((SaltUser)rhs).username):false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public int hashCode() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return this.username.hashCode(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public String toString() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        StringBuilder sb = new StringBuilder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sb.append(super.toString()).append(": "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sb.append("Username: ").append(this.username).append("; "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sb.append("Password: [PROTECTED]; "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sb.append("Enabled: ").append(this.enabled).append("; "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sb.append("AccountNonExpired: ").append(this.accountNonExpired).append("; "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sb.append("credentialsNonExpired: ").append(this.credentialsNonExpired).append("; "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sb.append("AccountNonLocked: ").append(this.accountNonLocked).append("; "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(!this.authorities.isEmpty()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            sb.append("Granted Authorities: "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            boolean first = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            Iterator var3 = this.authorities.iterator(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            while(var3.hasNext()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                GrantedAuthority auth = (GrantedAuthority)var3.next(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if(!first) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    sb.append(","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                first = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                sb.append(auth); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            sb.append("Not granted any authorities"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return sb.toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public static SaltUser.UserBuilder withUsername(String username) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return (new SaltUser.UserBuilder()).username(username); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public static class UserBuilder { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        private String username; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        private String password; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        private List<GrantedAuthority> authorities; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        private boolean accountExpired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        private boolean accountLocked; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        private boolean credentialsExpired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        private boolean disabled; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        private UserBuilder() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        private SaltUser.UserBuilder username(String username) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            Assert.notNull(username, "username cannot be null"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            this.username = username; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        public SaltUser.UserBuilder password(String password) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            Assert.notNull(password, "password cannot be null"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            this.password = password; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        public SaltUser.UserBuilder roles(String... roles) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            List<GrantedAuthority> authorities = new ArrayList(roles.length); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String[] var3 = roles; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            int var4 = roles.length; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            for(int var5 = 0; var5 < var4; ++var5) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                String role = var3[var5]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                Assert.isTrue(!role.startsWith("ROLE_"), role + " cannot start with ROLE_ (it is automatically added)"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                authorities.add(new SimpleGrantedAuthority("ROLE_" + role)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return this.authorities((List)authorities); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        public SaltUser.UserBuilder authorities(GrantedAuthority... authorities) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return this.authorities(Arrays.asList(authorities)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        public SaltUser.UserBuilder authorities(List<? extends GrantedAuthority> authorities) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            this.authorities = new ArrayList(authorities); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        public SaltUser.UserBuilder authorities(String... authorities) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return this.authorities(AuthorityUtils.createAuthorityList(authorities)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        public SaltUser.UserBuilder accountExpired(boolean accountExpired) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            this.accountExpired = accountExpired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        public SaltUser.UserBuilder accountLocked(boolean accountLocked) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            this.accountLocked = accountLocked; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        public SaltUser.UserBuilder credentialsExpired(boolean credentialsExpired) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            this.credentialsExpired = credentialsExpired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        public SaltUser.UserBuilder disabled(boolean disabled) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            this.disabled = disabled; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        public UserDetails build() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return new User(this.username, this.password, !this.disabled, !this.accountExpired, !this.credentialsExpired, !this.accountLocked, this.authorities); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private static class AuthorityComparator implements Comparator<GrantedAuthority>, Serializable { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        private static final long serialVersionUID = 420L; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        private AuthorityComparator() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        public int compare(GrantedAuthority g1, GrantedAuthority g2) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return g2.getAuthority() == null?-1:(g1.getAuthority() == null?1:g1.getAuthority().compareTo(g2.getAuthority())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				} 
			 |