@Override
    protected Event doExecuteInternal(final RequestContext requestContext) {
        try {
            val credential = requestContext.getConversationScope().get(Credential.class.getName(), Credential.class);
            LOGGER.debug("Attempting to unlock account for [{}]", credential);
            val givenValue = requestContext.getConversationScope().get("captchaValue", String.class);
            val providedValue = WebUtils.getRequestParameterOrAttribute(requestContext, "captchaValue").orElseThrow();
            LOGGER.debug("Comparing captcha value [{}] with user entry [{}]", givenValue, providedValue);
            if (!givenValue.equals(providedValue) || !passwordManagementService.unlockAccount(credential)) {
                throw new AccountLockedException("Captcha value does not match, or CAS cannot unlock the account for " + credential.getId());
            }
            WebUtils.addInfoMessageToContext(requestContext, "screen.account.unlock.success");
            return success();
        } catch (final Throwable e) {
            WebUtils.addErrorMessageToContext(requestContext, "screen.account.unlock.fail");
            LoggingUtils.error(LOGGER, e);
            return error();
        }
    }
This is {@link AccountUnlockStatusAction}.

@author Misagh Moayyed
@since 6.6.0
support/cas-server-support-pm-webflow/src/main/java/org/apereo/cas/pm/web/flow/actions/AccountUnlockStatusAction.java