XML-APIs
XML-APIs können nach dem Aufrufen von getAsXmlContent() entweder über das Objekt Anforderung oder eine Eigenschaft ParameterValue verwendet werden.
- Aufrufen von getAsXmlContent() über das Objekt Anforderung oder die Eigenschaft ParameterValue. Dies gibt ein iterierbares Objekt der zugrunde liegenden Klasse XMLContent zurück.
- Aufrufen von getIterator() oder getIterator(String xPath) im Objekt XMLContent. Dies gibt ein Objekt XMLElementIterator zurück, das zum Iterieren von XML-Elementen verwendet werden kann.
- Aufrufen der Methode hasNext() im Objekt XMLElementIterator, um zu bestimmen, ob ein anderes Element verfügbar ist.
- Aufrufen von next() im Objekt XMLElementIterator, um das nächste XML-Element zurückzugeben. Sie können next() erst nach Aufrufen von hasNext() aufrufen.
- Aufruf von valueFor(String tableName, String fieldName) auf dem XML-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 XML-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 XML-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>
<record>
<name>'Test Record 1'</name>
<description>'Test Record 1 Description'</description>
<tag>critical</tag>
</record>
<record>
<name>'Test Record 2'</name>
<description>'Test Record 2 Description'</description>
<tag>security</tag>
</record>
</data>Die folgende Verschlüsselungsregelaktion kann angewendet werden:
function sampleXmlAction1() {
var xmlContent = request.getAsXmlContent();
// This loop iterates over all description tags that match the given path
var xmlElementIterator = xmlContent.getIterator('data/record/description');
while (xmlElementIterator.hasNext()) {
var xmlElement = xmlElementIterator.next();
xmlElement.valueFor('incident', 'short_decription');
}
}Diese Aktion iteriert das Tag Beschreibung und fordert den Proxy-Server auf, die Werte zu verschlüsseln und sie in der Instanz in instance.short_description einzufügen.
Zu einem unbekannten Tabellenfeld in der Instanz zuordnen
In diesem Beispiel iteriert die Regel die Tags Datensatz, weiß jedoch nicht, welche Tags innerhalb des Tags Datensatz zu erwarten sind. Es ist nur bekannt, dass die Tags innerhalb der Tags Datensatz mit den Namen der in der Tabelle „URL-Parameter“ angegebenen Spalten übereinstimmen.
Die Regel legt außerdem fest, dass bei Vorliegen einer Incident-Tabelle, die Daten im Tag Beschreibung verschlüsselt und im Feld short_description der Instanz gespeichert werden sollen.
function sampleXmlAction2() {
var xmlContent = request.getAsXmlContent();
var tableName = request.urlParam.table;
// This first iterator will iterate over all record elements
var xmlElementIterator = xmlContent.getIterator('data/record');
while (xmlElementIterator.hasNext()) {
encryptFieldsInRecord(xmlElementIterator.next());
}
}
function encryptFieldsInRecord(xmlElement) {
//Then, iterate over all tags representing fields in the table
var fieldIterator = xmlElement.getIteratorOverAllChildren();
while (fieldIterator.hasNext()) {
var field = fieldIterator.next();
var fieldName = childElement.getName();
//if table is incident, then description is encrypted for the short_description field
if (tableName == 'incident' && fieldName == 'description') {
field.valueFor(tableName, 'short_description');
} else {
//if table is not incident, ask the proxy to check if the given field is encrypted for the given table
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 das Tag nicht mit einem Feld in der Tabelle übereinstimmt, überspringt der Proxy dieses Tag. Wenn das Tag mit einem für die Verschlüsselung markierten Feld übereinstimmt, verschlüsselt der Edge Encryption Proxy-Server den Wert.
Eine verschlüsselte Abfrage verwenden
In diesem Beispiel haben alle Tags das Attribut Filter, das angibt, ob das Tag eine verschlüsselte Abfrage enthält.
<data>
<record>
<name filter="false">'Test Record 1'</name>
<description filter="false">'Test Record 1 Description'</description>
<query filter="true">category=1^name=edge</query>
</record>
<record>
<name filter="false">'Test Record 2'</name>
<description filter="false">'Test Record 2 Description'</description>
<query filter="true">category=2^severity=3</query>
</record>
</data>Die folgende Verschlüsselungsregelaktion kann angewendet werden:
function sampleXmlAction3() {
var xmlContent = request.getAsXmlContent();
var tableName = request.urlParam.table;
// This first iterator will iterate over all record elements
var xmlElementIterator = xmlContent.getIterator('data/record');
while (xmlElementIterator.hasNext()) {
encryptFieldsInRecord(xmlElementIterator.next());
}
}
function encryptFieldsInRecord(xmlElement) {
//this time we want to iterate over all tags representing fields in the table
var fieldIterator = xmlElement.getIteratorOverAllChildren();
while (fieldIterator.hasNext()) {
var field = fieldIterator.next();
var fieldname = childElement.getName();
//let's look at the filter attribute, if true, then encrypt as encoded query
if (field.getAttributeValue('filter') == 'true') {
field.encodedQueryFor(tableName);
} else {
//if it is false then check if the field should be encrypted
field.valueFor(tableName, fieldName);
}
}
}Wenn das Attribut Filter „Wahr“ ist, fordert die Regel den Proxy-Server auf, die Werte in der verschlüsselten Abfrage zu verschlüsseln. Bei „falsch“ fordert die Regel den Proxy auf, zu prüfen, ob das Feld verschlüsselt werden soll.