package org.apereo.cas.authentication.principal; import com.fasterxml.jackson.annotation.JsonIgnore; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; import org.apereo.cas.authentication.Authentication; import java.util.Collections; import java.util.Map; /** * Null principal implementation that allows us to construct {@link Authentication}s in the event that no * principal is resolved during the authentication process. * @author Marvin S. Addison * @author Misagh Moayyed * @since 4.1.0 */ public class NullPrincipal implements Principal { private static final long serialVersionUID = 2309300426720915104L; /** The nobody principal. */ private static final String NOBODY = "nobody"; /** The singleton instance. **/ private static NullPrincipal INSTANCE; private Map<String, Object> attributes; /** * Instantiates a new Null principal. */ protected NullPrincipal() { this.attributes = Collections.emptyMap(); } /** * Returns the single instance of this class. Will create * one if none exists. * * @return the instance */ public static NullPrincipal getInstance() { if (INSTANCE == null) { INSTANCE = new NullPrincipal(); } return INSTANCE; } @JsonIgnore @Override public String getId() { return NOBODY; } @Override public Map<String, Object> getAttributes() { return this.attributes; } @Override public boolean equals(final Object obj) { if (obj == null) { return false; } if (obj == this) { return true; } if (obj.getClass() != getClass()) { return false; } final NullPrincipal rhs = (NullPrincipal) obj; return new EqualsBuilder() .append(getId(), rhs.getId()) .append(this.attributes, rhs.attributes) .isEquals(); } @Override public int hashCode() { return new HashCodeBuilder() .append(getId()) .append(attributes) .toHashCode(); } }