API JSON

  • Rversion finale: Zurich
  • Mis à jour 13 mars 2026
  • 3 minutes de lecture
  • Les API JSON peuvent être utilisées après l’appel de getAsJsonContent()sur l’objet de demande ou une propriété ParameterValue .

    Lorsque vous utilisez des API JSON pour écrire votre règle de chiffrement, vous pouvez suivre un format général :
    1. Appelez getAsJsonContent() sur l’objet de la demande. Cela renvoie un objet itérable de la classe sous-jacente JsonNode .
    2. Appelez iterator() ou getIterator(String xPath) sur l’objet JsonNode . Cela renvoie un objet JsonNodeIterator qui peut être utilisé pour itérer sur les nœuds de l’objet JSON.
    3. Appelez la méthode hasNext() sur l’objet JsonNodeIterator pour déterminer si un autre élément est disponible.
    4. Appelez next() sur l’objet JsonNodeIterator pour renvoyer l’élément JSON suivant. Vous ne pouvez pas appeler next() sans appeler d’abord hasNext().
    5. Appelez valueFor(String tableName, String fieldName) sur l’élément JSON. Cette méthode indique au proxy que la valeur de cet élément est mappée au champ spécifié dans la table spécifiée. Le proxy vérifie ensuite si le champ doit être chiffré.
      Remarque :
      Pour déterminer si vous souhaitez appeler valueFor(String tableName, String fieldName) sur un élément JSON, vous pouvez utiliser la méthode getName() pour renvoyer le nom de l’élément.

    Mappage à un champ de table connu sur l’instance

    Dans cet exemple, la charge utile JSON est traitée sur l’instance pour insérer des enregistrements dans la table d’incidents. Le champ de description renseigne les short_description sur l’incident.

    {
        data: {
            records: [
                {
                    "name": "Test Record 1",
                    "description": "Test Record 1 Description",
                    "tag": "security"
                }, 
                {
                    "name": "Test Record 1",
                    "description": "Test Record 1 Description",
                    "tag": "security"
                }],
            "query": "assigned_to=3D4860165813e63a00d00abd322244b092^category=vulnerability"
        },
        "source": "10.11.13.14"
    }

    La règle suivante peut s’appliquer :

    function sampleJsonAction1() {
        var jsonContent = request.getAsJsonContent();
        // This loop iterates over all description elements in the records array
        var jsonNodeIterator = jsonContent.getIterator(’/data/records/description’);    
        while (jsonNodeIterator.hasNext()) {
            var jsonNode = jsonNodeIterator.next();
            jsonNode.valueFor('incident', 'short_decription');
        }
    }
    

    Cette action itère à travers les nœuds de description et demande au serveur proxy de chiffrer les valeurs et de les insérer dans incident.short_description sur l’instance.

    Remarque :
    Cette règle trouve tous les nœuds de description dans la charge utile JSON. S’il n’y a qu’une seule occurrence d’un nœud à chiffrer, la règle utilise toujours xPath et la structure de l’itérateur. Cependant, il n’itére qu’une seule fois dans la boucle.

    Mappage à un champ de table inconnu sur l’instance

    Dans cet exemple, la règle itère sur les enregistrements, mais ne sait pas à quels nœuds s’attendre. La seule certitude est que pour chaque objet dans les enregistrements, les nœuds correspondent aux noms des colonnes spécifiées dans le paramètre URL de la table.

    La règle spécifie également que, si la table est incidente, les données du nœud de description doivent être chiffrées et stockées dans le champ short_description de l’instance.

    function sampleJsonAction2() {
        var jsonContent = request.getAsJsonContent();
        var tableName = request.urlParam.table;
        // This first iterator will iterate over all record elements
        var jsonNodeIterator = jsonContent.getIterator('data/records');
        while (jsonNodeIterator.hasNext()) {
                encryptFieldsInRecord(jsonNodeIterator.next());
        }
    }
    function encryptFieldsInRecord(jsonNode) {
        //this time we want to iterate over all nodes
        var fieldIterator = jsonNode.iterator();
        while (fieldIterator.hasNext()) {
                var field = fieldIterator.next();
                var fieldname = childElement.getName();
                if (fieldName == 'description') {
                    field.valueFor(tableName, 'short_description');
                } else {
                    field.valueFor(tableName, fieldName);
                }
        }
    }

    Dans la fonction encryptFieldsInRecord(), la méthode valueFor() est appelée sur une table et un champ qui sont affectés dynamiquement en fonction de la demande. Même si les noms de table et de champ peuvent changer, la règle demande au proxy de vérifier si le champ de la table doit être chiffré en fonction des configurations de chiffrement définies.

    Si le champ n’est pas configuré pour le chiffrement ou si le nom de nœud ne correspond pas à un champ de la table, le proxy ignore ce nœud. Si le nom du nœud correspond à un champ marqué pour chiffrement, le proxy chiffre la valeur.

    Utilisation d’une requête codée

    function sampleJsonAction3() {
        var jsonContent = request.getAsJsonContent();
        var tableName = request.urlParam.table;
        // This first iterator will iterate over all record elements
        var jsonNodeIterator = jsonContent.getIterator('data');
        while (jsonNodeIterator.hasNext()) {
            var jsonNode = jsonNodeIterator.next();
            if (jsonNode.getName() == 'records')
                encryptRecors(jsonNodeIterator.next());
            else if (jsonNode.getName() == 'query')
                jsonNode.encodedQueryFor(tableName);
        }
    }
    function encryptRecords(jsonNode) {
        //we iterate over all fields in the node
        var recordIterator = jsonNode.iterator();
        while (recordIterator.hasNext()) {
            encryptFieldsInRecord(recordIterator.next());
        }
    }
    function encryptFieldsInRecord(jsonNode) {
        //this time we want to iterate over all nodes
        var fieldIterator = jsonNode.iterator();
        while (fieldIterator.hasNext()) {
                var field = fieldIterator.next();
                var fieldname = childElement.getName();
                field.valueFor(tableName, fieldName);
        }
    }

    Dans cet exemple, la règle itère sur les données. Lorsqu’il trouve des enregistrements, il exécute la même logique que dans le deuxième exemple, en itérant sur les champs de chaque nœud. Lorsqu’il trouve le nœud de requête , il appelle encodedQueryFor() pour chiffrer les valeurs qui doivent être chiffrées dans la requête.