@Override
    public boolean exceedsThreshold(final HttpServletRequest request) {
        val key = constructKey(request);
        LOGGER.trace("Throttling threshold key is [{}] with calculated threshold [{}]", key, getThresholdRate());
        val store = getConfigurationContext().getThrottledSubmissionStore();

        if (store.contains(key)) {
            val submission = store.get(key);
            LOGGER.trace("Found existing throttled submission [{}] for key [{}]", submission, key);
            if (!submission.hasExpiredAlready()) {
                LOGGER.warn("Throttled submission [{}] remains throttled; submission expires at [{}]", key, submission.getExpiration());
                request.setAttribute(ThrottledSubmission.class.getSimpleName(), submission);
                return true;
            }
        }
        if (store.exceedsThreshold(key, getThresholdRate())) {
            val submission = store.get(key);
            request.setAttribute(ThrottledSubmission.class.getSimpleName(), submission);
            return true;
        }
        return false;
    }
Implementation of a {@link InMemoryThrottledSubmissionHandlerInterceptor} that keeps track of a mapping
of IP Addresses to number of failures to authenticate.
This class relies on an external configuration to clean it up.
It ignores the threshold data in the parent class.

@author Scott Battaglia
@since 3.0.0
support/cas-server-support-throttle-core/src/main/java/org/apereo/cas/throttle/AbstractInMemoryThrottledSubmissionHandlerInterceptorAdapter.java