@Override
    protected AuthenticationHandlerExecutionResult authenticateUsernamePasswordInternal(
        final UsernamePasswordCredential credential, final String originalPassword) throws Throwable {
        val username = credential.getUsername();
        val password = credential.toPassword();

        val jdbcCall = new SimpleJdbcCall(jdbcTemplate).withProcedureName(properties.getProcedureName());
        val results = jdbcCall.execute(Map.of("username", username, "password", password));
        LOGGER.debug("Procedure results are [{}]", results);
        if (results.isEmpty() || !BooleanUtils.toBoolean(results.get("status").toString())) {
            throw new FailedLoginException("Failed to authenticate user");
        }
        val principal = principalFactory.createPrincipal(username, CollectionUtils.toMultiValuedMap(results));
        return createHandlerResult(credential, principal, new ArrayList<>());
    }
This is {@link StoredProcedureAuthenticationHandler}.

@author Misagh Moayyed
@since 7.2.0
support/cas-server-support-jdbc-authentication/src/main/java/org/apereo/cas/jdbc/StoredProcedureAuthenticationHandler.java