JSON-APIs
JSON-APIs können nach dem Aufrufen von getAsJsonContent() entweder über das Objekt Anforderung oder eine Eigenschaft ParameterValue verwendet werden.
- Aufrufen von getAsJsonContent() im Objekt Anforderung. Dies gibt ein iterierbares Objekt der zugrunde liegende Klasse JsonNode zurück.
- Rufen Sie An Iterator() Oder GetIterator (Zeichenfolge XPath) Auf der JsonNode Objekt. Dies gibt ein Objekt JsonNodeIterator zurück, das zum Iterieren von Knoten im JSON-Objekt verwendet werden kann.
- Aufrufen der Methode hasNext() im Objekt JsonNodeIterator, um zu bestimmen, ob ein anderes Element verfügbar ist.
- Aufrufen von next() im Objekt JsonNodeIterator, um das nächste JSON-Element zurückzugeben. Sie können next() erst nach Aufrufen von hasNext() aufrufen.
- Aufrufen von valueFor(String tableName, String Feldname) auf dem 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 prüft dann, ob das Feld verschlüsselt werden muss.Hinweis:Um festzustellen, ob Sie valueFor(String tableName, String fieldName) auf einem JSON-Element aufrufen möchten, können Sie die Methode getName() verwenden, um den Namen des Elements zurückzugeben.
Zu einem bekannten Tabellenfeld in der Instanz zuordnen
In diesem Beispiel wird die JSON-Payload auf der Instanz verarbeitet, um Datensätze in die Incident-Tabelle einzufügen. Das Beschreibungsfeld füllt den Incident mit short_description 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 gelten:
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 iteriert die Knoten Beschreibung und fordert den Proxy-Server auf, die Werte zu verschlüsseln und sie in instance.short_description auf der Instanz einzufügen.
Zu einem unbekannten Tabellenfeld in der Instanz zuordnen
In diesem Beispiel wird die Regel Datensätze iteriert. Es ist jedoch nicht bekannt, welche Knoten zu erwarten sind. Es ist nur bekannt, dass für jedes Objekt innerhalb von Datensätze die Knoten mit den Namen der im URL-Parameter der Tabelle angegebenen Spalten übereinstimmen.
Die Regel legt außerdem fest, dass bei Vorliegen einer Incident-Tabelle, die Daten im Knoten Beschreibung verschlüsselt und im Feld short_description der Instanz gespeichert werden sollen.
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 der Funktion encryptFieldsInRecord() wird die Methode valueFor() für eine Tabelle und ein Feld aufgerufen, die aufgrund der Anforderung dynamisch zugewiesen werden. Obwohl sich die Tabellen- und Feldnamen ändern können, fordert die Regel den Proxy auf, zu prüfen, ob das Feld in der Tabelle aufgrund der 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.
Eine verschlüsselte Abfrage verwenden
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 wird die Regel Daten iteriert. Mit Auffinden von Datensätzen wird die gleiche Logik wie im zweiten Beispiel ausgeführt, wobei die Felder in jedem Knoten iteriert werden. Nach Auffinden des Knotens Abfrage wird encodedQueryFor() aufgerufen, um Werte verschlüsseln, die in der Abfrage verschlüsselt werden sollen.