package com.hwlcn.security.authc; import com.hwlcn.security.authz.Permission; import com.hwlcn.security.authz.SimpleAuthorizationInfo; import com.hwlcn.security.util.ByteSource; import com.hwlcn.security.subject.PrincipalCollection; import com.hwlcn.security.subject.SimplePrincipalCollection; import java.io.Serializable; import java.util.Collection; import java.util.Set; public class SimpleAccount implements Account, MergableAuthenticationInfo, SaltedAuthenticationInfo, Serializable { private SimpleAuthenticationInfo authcInfo; private SimpleAuthorizationInfo authzInfo; private boolean locked; private boolean credentialsExpired; public SimpleAccount() { } public SimpleAccount(Object principal, Object credentials, String realmName) { this(principal instanceof PrincipalCollection ? (PrincipalCollection) principal : new SimplePrincipalCollection(principal, realmName), credentials); } public SimpleAccount(Object principal, Object hashedCredentials, ByteSource credentialsSalt, String realmName) { this(principal instanceof PrincipalCollection ? (PrincipalCollection) principal : new SimplePrincipalCollection(principal, realmName), hashedCredentials, credentialsSalt); } public SimpleAccount(Collection principals, Object credentials, String realmName) { this(new SimplePrincipalCollection(principals, realmName), credentials); } public SimpleAccount(PrincipalCollection principals, Object credentials) { this.authcInfo = new SimpleAuthenticationInfo(principals, credentials); this.authzInfo = new SimpleAuthorizationInfo(); } public SimpleAccount(PrincipalCollection principals, Object hashedCredentials, ByteSource credentialsSalt) { this.authcInfo = new SimpleAuthenticationInfo(principals, hashedCredentials, credentialsSalt); this.authzInfo = new SimpleAuthorizationInfo(); } public SimpleAccount(PrincipalCollection principals, Object credentials, Set<String> roles) { this.authcInfo = new SimpleAuthenticationInfo(principals, credentials); this.authzInfo = new SimpleAuthorizationInfo(roles); } public SimpleAccount(Object principal, Object credentials, String realmName, Set<String> roleNames, Set<Permission> permissions) { this.authcInfo = new SimpleAuthenticationInfo(new SimplePrincipalCollection(principal, realmName), credentials); this.authzInfo = new SimpleAuthorizationInfo(roleNames); this.authzInfo.setObjectPermissions(permissions); } public SimpleAccount(Collection principals, Object credentials, String realmName, Set<String> roleNames, Set<Permission> permissions) { this.authcInfo = new SimpleAuthenticationInfo(new SimplePrincipalCollection(principals, realmName), credentials); this.authzInfo = new SimpleAuthorizationInfo(roleNames); this.authzInfo.setObjectPermissions(permissions); } public SimpleAccount(PrincipalCollection principals, Object credentials, Set<String> roleNames, Set<Permission> permissions) { this.authcInfo = new SimpleAuthenticationInfo(principals, credentials); this.authzInfo = new SimpleAuthorizationInfo(roleNames); this.authzInfo.setObjectPermissions(permissions); } public PrincipalCollection getPrincipals() { return authcInfo.getPrincipals(); } public void setPrincipals(PrincipalCollection principals) { this.authcInfo.setPrincipals(principals); } public Object getCredentials() { return authcInfo.getCredentials(); } public void setCredentials(Object credentials) { this.authcInfo.setCredentials(credentials); } public ByteSource getCredentialsSalt() { return this.authcInfo.getCredentialsSalt(); } public void setCredentialsSalt(ByteSource salt) { this.authcInfo.setCredentialsSalt(salt); } public Collection<String> getRoles() { return authzInfo.getRoles(); } public void setRoles(Set<String> roles) { this.authzInfo.setRoles(roles); } public void addRole(String role) { this.authzInfo.addRole(role); } public void addRole(Collection<String> roles) { this.authzInfo.addRoles(roles); } public Collection<String> getStringPermissions() { return authzInfo.getStringPermissions(); } public void setStringPermissions(Set<String> permissions) { this.authzInfo.setStringPermissions(permissions); } public void addStringPermission(String permission) { this.authzInfo.addStringPermission(permission); } public void addStringPermissions(Collection<String> permissions) { this.authzInfo.addStringPermissions(permissions); } public Collection<Permission> getObjectPermissions() { return authzInfo.getObjectPermissions(); } public void setObjectPermissions(Set<Permission> permissions) { this.authzInfo.setObjectPermissions(permissions); } public void addObjectPermission(Permission permission) { this.authzInfo.addObjectPermission(permission); } public void addObjectPermissions(Collection<Permission> permissions) { this.authzInfo.addObjectPermissions(permissions); } public boolean isLocked() { return locked; } public void setLocked(boolean locked) { this.locked = locked; } public boolean isCredentialsExpired() { return credentialsExpired; } public void setCredentialsExpired(boolean credentialsExpired) { this.credentialsExpired = credentialsExpired; } public void merge(AuthenticationInfo info) { authcInfo.merge(info); if (info instanceof SimpleAccount) { SimpleAccount otherAccount = (SimpleAccount) info; if (otherAccount.isLocked()) { setLocked(true); } if (otherAccount.isCredentialsExpired()) { setCredentialsExpired(true); } } } public int hashCode() { return (getPrincipals() != null ? getPrincipals().hashCode() : 0); } public boolean equals(Object o) { if (o == this) { return true; } if (o instanceof SimpleAccount) { SimpleAccount sa = (SimpleAccount) o; return (getPrincipals() != null ? getPrincipals().equals(sa.getPrincipals()) : sa.getPrincipals() == null); } return false; } public String toString() { return getPrincipals() != null ? getPrincipals().toString() : "empty"; } }