private void createSpnegoActionState(final Flow flow) {
        val spnego = createActionState(flow, CasWebflowConstants.STATE_ID_SPNEGO, CasWebflowConstants.STATE_ID_SPNEGO);
        val transitions = spnego.getTransitionSet();
        transitions.add(createTransition(CasWebflowConstants.TRANSITION_ID_SUCCESS,
            CasWebflowConstants.STATE_ID_CREATE_TICKET_GRANTING_TICKET));
        transitions.add(createTransition(CasWebflowConstants.TRANSITION_ID_ERROR, getStateIdOnSpnegoFailure(flow)));
        transitions.add(createTransition(CasWebflowConstants.TRANSITION_ID_WARN, CasWebflowConstants.TRANSITION_ID_WARN));
        transitions.add(createTransition(CasWebflowConstants.TRANSITION_ID_AUTHENTICATION_FAILURE,
            CasWebflowConstants.STATE_ID_VIEW_LOGIN_FORM));
        transitions.add(createTransition(CasWebflowConstants.TRANSITION_ID_SUCCESS_WITH_WARNINGS,
            CasWebflowConstants.STATE_ID_SHOW_AUTHN_WARNING_MSGS));
        spnego.getExitActionList().add(createEvaluateAction(CasWebflowConstants.ACTION_ID_CLEAR_WEBFLOW_CREDENTIALS));
    }
The {@link SpnegoWebflowConfigurer} is responsible for
adjusting the CAS webflow context for spnego integration.

@author Misagh Moayyed
@since 4.2
support/cas-server-support-spnego-webflow/src/main/java/org/apereo/cas/web/flow/SpnegoWebflowConfigurer.java