@Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (!(o instanceof SimpleAuthenticationInfo)) {
            return false;
        }

        SimpleAuthenticationInfo that = (SimpleAuthenticationInfo) o;

        //noinspection RedundantIfStatement
        if (!Objects.equals(principals, that.principals)) {
            return false;
        }

        return true;
    }
Returns <code>true</code> if the Object argument is an <code>instanceof SimpleAuthenticationInfo</code> and
its {@link #getPrincipals() principals} are equal to this instance's principals, <code>false</code> otherwise.

@param o the object to compare for equality.
@return <code>true</code> if the Object argument is an <code>instanceof SimpleAuthenticationInfo</code> and
its {@link #getPrincipals() principals} are equal to this instance's principals, <code>false</code> otherwise.
core/src/main/java/org/apache/shiro/authc/SimpleAuthenticationInfo.java