JSON-APIs
JSON-APIs können nach dem Aufruf verwendet werden GetAsJsonContent() Entweder auf Anforderung Objekt oder ein ParameterWert Eigenschaft.
- Rufen Sie An GetAsJsonContent() Auf Anforderung Objekt. Gibt ein iterfähiges Objekt von zurück JsonNode Zugrunde liegende Klasse.
- Rufen Sie An Iterator() Oder GetIterator (Zeichenfolgen-XPath) Auf JsonNode Objekt. Gibt ein zurück JsonNodeIterator Objekt, das zum Iterieren über Knoten im JSON-Objekt verwendet werden kann.
- Rufen Sie an HasNext() Methode auf JsonNodeIterator Objekt, um zu bestimmen, ob ein anderes Element verfügbar ist.
- Rufen Sie An Next() Auf JsonNodeIterator Objekt, um das nächste JSON-Element zurückzugeben. Sie können nicht anrufen Next() Ohne ersten Anruf HasNext() .
- Rufen Sie An WertFor(Zeichenfolge tableName, Zeichenfolge feldName) Im JSON-Element. Diese Methode teilt dem Proxy mit, dass der Wert für dieses Element dem angegebenen Feld in der angegebenen Tabelle zugeordnet ist. Der Proxy überprüft dann, ob das Feld verschlüsselt werden muss.Hinweis:Um zu bestimmen, ob Sie anrufen möchten WertFor(Zeichenfolge tableName, Zeichenfolge feldName) In einem JSON-Element können Sie verwenden GetName() Methode zum Rückgeben des Namens des Elements.
Zuordnung zu einem bekannten Tabellenfeld in der Instanz
In diesem Beispiel wird die JSON-Nutzlast in der Instanz verarbeitet, um Datensätze in die Incident-Tabelle einzufügen. Das Beschreibungsfeld füllt „short_description“ für den Incident aus.
{
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"
}Die folgende Regel kann angewendet werden:
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');
}
}
Diese Aktion wird durch iteriert Beschreibung Knoten und fordert den Proxy-Server auf, die Werte zu verschlüsseln und in Incident.short_description in der Instanz einzufügen.
Zuordnung zu einem unbekannten Tabellenfeld in der Instanz
In diesem Beispiel iteriert die Regel über Datensätze , Ist aber nicht sicher, welche Knoten zu erwarten sind. Das einzig bekannte ist für jedes Objekt in Datensätze , Die Knoten stimmen mit den Namen der Spalten überein, die im Parameter „Tabellen-URL“ angegeben sind.
Die Regel gibt auch an, dass, wenn die Tabelle „Incident“ ist, die Daten in der Beschreibung Knoten muss verschlüsselt und im Feld „short_description“ in der Instanz gespeichert werden.
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);
}
}
}In VerschlüsseltFieldsInRecord() Funktion, die WertFür() Die Methode wird für eine Tabelle und ein Feld aufgerufen, die basierend auf der Anforderung dynamisch zugewiesen werden. Auch wenn sich die Tabellen- und Feldnamen ändern können, fordert die Regel den Proxy auf, zu überprüfen, ob das Feld in der Tabelle basierend auf den definierten Verschlüsselungskonfigurationen verschlüsselt werden muss.
Wenn das Feld nicht für die Verschlüsselung konfiguriert ist oder der Knotenname nicht mit einem Feld in der Tabelle übereinstimmt, überspringt der Proxy diesen Knoten. Wenn der Knotenname mit einem für die Verschlüsselung markierten Feld übereinstimmt, verschlüsselt der Proxy den Wert.
Mit einer codierten Abfrage
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);
}
}In diesem Beispiel iteriert die Regel über Daten . Wie gefunden Datensätze , Führt die gleiche Logik aus wie im zweiten Beispiel, wobei die Felder in jedem Knoten iteriert werden. Wenn gefunden wird Abfrage Knoten, ruft es auf EncodedQueryFor() Zum Verschlüsseln von Werten, die in der Abfrage verschlüsselt werden sollen.