@Bean
    @RefreshScope(proxyMode = ScopedProxyMode.DEFAULT)
    @ConditionalOnMissingBean(name = "hazelcastThrottleSubmissionStore")
    public ThrottledSubmissionsStore<ThrottledSubmission> throttleSubmissionStore(
        @Qualifier("casTicketRegistryHazelcastInstance")
        final HazelcastInstance casTicketRegistryHazelcastInstance,
        final CasConfigurationProperties casProperties) {
        val hz = casProperties.getAuthn().getThrottle().getHazelcast();
        val timeout = Beans.newDuration(casProperties.getAuthn().getThrottle().getSchedule().getRepeatInterval()).toSeconds();
        LOGGER.debug("Creating [{}] to record failed logins for throttling with timeout set to [{}]", MAP_KEY, timeout);
        val ipMapConfig = HazelcastConfigurationFactory.buildMapConfig(hz, MAP_KEY, timeout);
        HazelcastConfigurationFactory.setConfigMap(ipMapConfig, casTicketRegistryHazelcastInstance.getConfig());
        return new HazelcastMapThrottledSubmissionsStore(casTicketRegistryHazelcastInstance.getMap(MAP_KEY), casProperties);
    }
Configures a Hazelcast IMap that is used by the InMemory throttling interceptors to store
failed login attempts.

@author Travis Schmidt
@since 5.3.4
support/cas-server-support-throttle-hazelcast/src/main/java/org/apereo/cas/config/CasHazelcastThrottlingAutoConfiguration.java