@ConditionalOnMissingBean(name = "syncopeAuthenticationEventExecutionPlanConfigurer")
    @Bean
    @RefreshScope(proxyMode = ScopedProxyMode.DEFAULT)
    public AuthenticationEventExecutionPlanConfigurer syncopeAuthenticationEventExecutionPlanConfigurer(
        final CasConfigurationProperties casProperties,
        @Qualifier("syncopeAuthenticationHandlers")
        final BeanContainer<AuthenticationHandler> syncopeAuthenticationHandlers,
        @Qualifier(PrincipalResolver.BEAN_NAME_PRINCIPAL_RESOLVER)
        final PrincipalResolver defaultPrincipalResolver) {
        return plan -> {
            val syncope = casProperties.getAuthn().getSyncope();
            FunctionUtils.doIf(syncope.isDefined(),
                    o -> syncopeAuthenticationHandlers.toList().forEach(
                        handler -> plan.registerAuthenticationHandlerWithPrincipalResolver(handler, defaultPrincipalResolver)))
                .accept(syncope);
        };
    }
This is {@link SyncopeAuthenticationConfiguration}.

@author Misagh Moayyed
@since 5.3.0
support/cas-server-support-syncope-authentication/src/main/java/org/apereo/cas/config/SyncopeAuthenticationConfiguration.java