Zugriffsprotokollierung
Zugriffe auf geschützte Dienste können protokolliert werden. Diese Option ist standardmäßig nicht aktiviert, kann jedoch durch Anpassung der Konfiguration eingeschaltet werden. Hierbei ist es möglich, das Logging für jeden unterstützten Diensttyp separat zu konfigurieren. Es gibt vier Arten von LoggingHandlern, die in jeglicher Kombination verwendet werden können.
LoggingHandler
GetRequestLoggingHandler
Dieser Handler protokolliert Parameterwerte aus einem HTTP GET Aufruf des geschützten Dienstes.
Im Ergebnis wird jeweils der Name des Parameters als Schlüssel und der Parameterwert als Wert gespeichert.
Für Schlüssel, die nicht aufgelöst werden können, wird der Wert gespeichert, der als valueNotFoundString
definiert ist.
<Entry>
<Object class="de.conterra.suite.security.interceptor.logging.handler.GetRequestLoggingHandler">
<Property name="valueNotFoundString" value="[request_parameter_not_found]" />
<Property name="parameterList">
<List>
<Entry value="request" />
<Entry value="service" />
<Entry value="version" />
</List>
</Property>
</Object>
</Entry>
ContentLoggingHandler
Dieser Handler protokolliert Inhalte einer HTTP POST Anfrage.
Die Inhalte werden über XPath-Ausdrücke definiert.
Zunächst wird konfiguriert für welche mimeTypes
der Handler aktiv wird.
Im Weiteren werden in der Property namespaces
zuerst die Namensräume definiert, die in den XPath-Ausdrücken verwendet werden.
Über eine parameterMap
können dann XPath-Ausdrücke definiert werden, die auf bestimmte Inhalte zeigen.
Diese Inhalte werden mit dem definierten Namen als Schlüssel abgespeichert.
<Entry>
<Object class="de.conterra.suite.security.interceptor.logging.handler.ContentLoggingHandler">
<Property name="mimeTypes">
<List>
<Entry value="text/xml" />
<Entry value="application/xml" />
</List>
</Property>
<Property name="valueNotFoundString" value="[no_xpath_value_found]" />
<Property name="namespaces">
<Map>
<Entry name="gml" value="http://www.opengis.net/gml" />
<Entry name="wfs" value="http://www.opengis.net/wfs" />
<Entry name="ogc" value="http://www.opengis.net/ogc" />
</Map>
</Property>
<Property name="parameterMap">
<Map>
<Entry name="PropertyName" value="/wfs:GetFeature/wfs:Query/ogc:PropertyName/text()" />
<Entry name="outputFormat" value="/wfs:GetFeature/@outputFormat" />
<Entry name="BoundingBox_Coordinates" value="/wfs:GetFeature/wfs:Query/ogc:Filter/ogc:BBOX/gml:Box/gml:coordinates/text()" />
</Map>
</Property>
</Object>
</Entry>
HeaderAttributesLoggingHandler
Mithilfe dieses Handlers können bestimmte HTTP Header Attribute protokolliert werden.
Diese werden in der Property attributeList
definiert.
Die Namen der Attribute werden als Schlüssel zusammen mit den entsprechenden Werten gespeichert.
<Entry>
<Object class="de.conterra.suite.security.interceptor.logging.handler.HeaderAttributesLoggingHandler">
<Property name="valueNotFoundString" value="[http_header_attribute_not_found]" />
<Property name="attributeList">
<List>
<Entry value="X-Forwarded-For" />
<Entry value="Accept-Charset" />
<Entry value="Accept-Encoding" />
<Entry value="Accept-Language" />
<Entry value="User-Agent" />
<Entry value="Host" />
</List>
</Property>
</Object>
</Entry>
SpecialParameterLoggingHandler
Dieser Handler speichert Werte zu vordefinierten Schlüsselworten. Es können folgende Schlüsselwerte verwendet werden:
- username
-
Speichert den Namen des angemeldeten Nutzers.
- timestamp
-
Speichert den Zeitstempel des Zugriffs.
- request
-
Speichert die gesamte Anfrage (unabhängig davon, ob HTTP GET oder POST).
- base_url
-
Speichert die Basis-URL des WSS.
- path_info
-
Speichert evtuell vorhandene Informationen zum Pfad.
- secured_service_url
-
Speichert die URL des zu schützenden Dienstes.
<Entry>
<Object class="de.conterra.suite.security.interceptor.logging.handler.SpecialParameterLoggingHandler">
<Property name="valueNotFoundString" value="[value_not_found]" />
<Property name="parameterList">
<List>
<Entry value="timestamp" />
<Entry value="username" />
<Entry value="request" />
<Entry value="base_url" />
<Entry value="path_info" />
<Entry value="secured_service_url" />
</List>
</Property>
</Object>
</Entry>
LoggerChain
Die einzelnen Handler werden in eine LoggerChain eingereiht, die wiederum in einem eigenen Interceptor abgearbeitet wird. Zu beachten ist hierbei, dass die Reihenfolge in der die Interceptoren definiert sind Einfluss auf die Ergebnisse haben kann: Wird der Logging-Interceptor zu Beginn der verschiedenen Interceptoren definiert, loggt dieser die Original-Anfragen. Wird er hingegen als letzter Interceptor definiert, ist es möglich, dass vorher bereits eine Veränderung der Anfrage stattgefunden hat und nun diese als Basis für den Logging-Interceptor gilt.
<Interceptor class="de.conterra.suite.security.interceptor.logging.LoggingInterceptor">
<Property name="inputLoggerChainList">
<List>
<Entry>
<Object class="de.conterra.suite.security.interceptor.logging.handler.LoggerChain">
<Property name="loggingHandlerList">
<List>
<Entry>
<Object class="de.conterra...handler.SpecialParameterLoggingHandler">
...
</Object>
</Entry>
<Entry>
...
</Entry>
</List>
</Property>
</Object>
</Entry>
</List>
</Property>
</Interceptor>
Die Konfiguration des Logging-Interceptors muss in der entsprechenden Moduldatei erfolgen, für die geloggt werden soll.
Diese finden sich im Verzeichnis [INSTALL_FOLDER]/webapp/wss/WEB-INF/classes/enforcementpoint-modules
.
Beispielkonfigurationen können in den Modulen von WMS und ArcGIS Server gefunden werden.
Die Speicherung des Logging-Ergebnis erfolgt im Standard-Log-Verzeichnis des Tomcats und wird in der Datei ct-security-<version>-wss-access.log
abgelegt.
Für jeden Request wird eine Zeile in dieser Datei ergänzt.
Speicherpfad und Dateinamen können in der Datei [INSTALL_FOLDER]/webapp/wss/WEB-INF/classes/log4j.xml
für den Appender ACCESS_LOGFILE
verändert werden.
Klassen, die innerhalb der log4j.xml
Datei verwendet werden, müssen in Form von JAR-Dateien im Verzeichnis [INSTALL_FOLDER]/webapp/wss/WEB-INF/classes/access-log-lib
abgelegt werden.
Die Ergebnisse werden als CSV-Datei gespeichert. Per Konfiguration kann das Layout dieser Datei verändert werden.
<layout class="de.conterra.suite.security.interceptor.logging.CSVLogInterceptorLayout">
<param name="ShowKeys" value="true" />
<param name="KeyValueSeparator" value="=" />
<param name="ValueSeparator" value=";" />
<param name="EntrySeparator" value="," />
<param name="Prefix" value="Logging-Interceptor: " />
<param name="Suffix" value=" - End of Entry" />
</layout>
Die dargestellte Konfiguration führt zu folgendem Eintrag in der Log-Datei:
Logging-Interceptor: timestamp=2010-08-31 09:00:57.057,username=user1,base_url=http://localhost:8080/wss/service/my_wfs/httpauth,
secured_service_url=http://localhost:8080/mywfs/DATA,X-Forwarded-For=127.0.0.1,Accept-Encoding=gzip,
Accept-Language=\[http_header_attribute_not_found\],User-Agent=uDig 1.2.0 (http://udig.refractions.net) Java/1.6.0_17,
Host=localhost:8080,outputFormat=GML2,BoundingBox_Coordinates=-202.9635499207607,-91.71156893819334 202.9635499207607,91.71156893819334,
PropertyName=GEOM - End of Entry