protected PrincipalCollection onRememberedPrincipalFailure(RuntimeException e, SubjectContext context) {

        if (LOGGER.isWarnEnabled()) {
            String message = "There was a failure while trying to retrieve remembered principals.  This could be due to a "
                    + "configuration problem or corrupted principals.  This could also be due to a recently "
                    + "changed encryption key, if you are using a shiro.ini file, this property would be "
                    + "'securityManager.rememberMeManager.cipherKey'"
                    + "see: http://shiro.apache.org/web.html#Web-RememberMeServices. "
                    + "The remembered identity will be forgotten and not used for this request.";
            LOGGER.warn(message);
        }
        forgetIdentity(context);
        //propagate - security manager implementation will handle and warn appropriately
        throw e;
    }
Called when an exception is thrown while trying to retrieve principals.  The default implementation logs a
warning message and forgets ('unremembers') the problem identity by calling
{@link #forgetIdentity(SubjectContext) forgetIdentity(context)} and then immediately re-throws the
exception to allow the calling component to react accordingly.
<p/>
This method implementation never returns an
object - it always rethrows, but can be overridden by subclasses for custom handling behavior.
<p/>
This most commonly would be called when an encryption key is updated and old principals are retrieved that have
been encrypted with the previous key.

@param e       the exception that was thrown.
@param context the contextual data, usually provided by a {@link Subject.Builder} implementation, that
               is being used to construct a {@link Subject} instance.
@return nothing - the original {@code RuntimeException} is propagated in all cases.
core/src/main/java/org/apache/shiro/mgt/AbstractRememberMeManager.java