@Override
    protected Event doExecuteInternal(final RequestContext requestContext) throws Throwable {
        if (WebUtils.isInterruptAuthenticationFlowFinalized(requestContext)) {
            return getInterruptSkippedEvent();
        }
        val authentication = WebUtils.getAuthentication(requestContext);
        val registeredService = (WebBasedRegisteredService) WebUtils.getRegisteredService(requestContext);

        val forceInquiry = isInterruptInquiryForcedFor(registeredService);
        if (!forceInquiry && interruptTrackingEngine.isInterrupted(requestContext)) {
            val currentResponse = interruptTrackingEngine.forCurrentRequest(requestContext);
            if (currentResponse.isPresent()) {
                val interruptResponse = inquire(requestContext);
                if (interruptResponse.isPresent() && interruptResponse.get().equals(currentResponse.get())) {
                    LOGGER.debug("Authentication event has already finalized interrupt. Skipping...");
                    return getInterruptSkippedEvent();
                }
            }
        }

        if (registeredService != null && registeredService.getWebflowInterruptPolicy() != null) {
            if (shouldSkipInterruptForPrincipalAttributes(registeredService, authentication)) {
                return getInterruptSkippedEvent();
            }
            if (shouldSkipInterruptForGroovyScript(requestContext, registeredService, authentication)) {
                return getInterruptSkippedEvent();
            }
        }

        return inquire(requestContext)
            .map(interruptResponse -> {
                LOGGER.debug("Interrupt inquiry is required since inquirer produced a response [{}]", interruptResponse);
                InterruptUtils.putInterruptIn(requestContext, interruptResponse);
                InterruptUtils.putInterruptTriggerMode(requestContext, casProperties.getInterrupt().getCore().getTriggerMode());
                WebUtils.putPrincipal(requestContext, authentication.getPrincipal());
                return eventFactory.event(this, CasWebflowConstants.TRANSITION_ID_INTERRUPT_REQUIRED);
            })
            .orElseGet(() -> {
                LOGGER.debug("Webflow interrupt is skipped since no inquirer produced a response");
                return getInterruptSkippedEvent();
            });
    }
This is {@link InquireInterruptAction}.

@author Misagh Moayyed
@since 5.2.0
support/cas-server-support-interrupt-webflow/src/main/java/org/apereo/cas/interrupt/webflow/actions/InquireInterruptAction.java