Kontext
In meinem aktuellen Projekt muss überprüft werden, ob Anforderungen an GeoServer (2.3.0) zulässig sind.
Das Projekt enthält diese Fakten:
- Der GS-Client kann die Hauptinformationen (z. B. das Kennwort) nicht bereitstellen. GS selbst hat keine Verbindung zu einem Benutzer- / Rollen-Repo
Deshalb haben wir die Gelegenheit genutzt, den Auth-Filter-Mechanismus zu verwenden, um Folgendes zu überprüfen:
- Eine gültige Anforderung (an eine bestimmte WFS-Schicht) enthält einen speziellen HTTP-Header (sagen wir X-CUSTOM-VALID).
- Dieser Header ist eine JSON-codierte Nachricht, die genügend Informationen enthält, um die Tatsache zu überprüfen, dass die Anforderung von einem Client initiiert wurde, der mit einem gültigen dritten System verbunden war (ein Benutzername, ein Geheimnis, ähnliches).
Status
Die Dokumentation sagt uns, dass wir dazu in der Lage sein sollten ...
In der Dokumentation ist jedoch nicht klar, wie solche Komponenten erstellt werden und wie sie konfiguriert werden sollten.
Debuggen von GeoServer Ich habe festgestellt, dass zum Konfigurieren eines solchen Filters ein dedizierter Authentifizierungsanbieter erforderlich ist. Das, um ein Panel in der Webadministrationsoberfläche zu haben (unter Authentifizierungen in der Liste Authentifizierungsfilter)
Panel
Mein Code besteht also aus folgenden Dateien:
- ProducteurAuthFilterPanel.java
- ProducteurAuthFilterPanelInfo.java
- ProducteurAuthenticationFilterConfig.java
- ProducteurAuthenticationFilterPanel.html
Diese müssen ein Bedienfeld in der Webadministrationsoberfläche hinzufügen. ProducteurAuthFilterPanelInfo
klebt die beiden anderen zusammen mit dem ProducteurAuthenticationFilter
Hier- Nachher (DER Filter ^^).
Das ProducteurAuthenticationFilterConfig
erklärt, dass in seinem Konstruktor:
setClassName(ProducteurAnonymousAuthenticationProvider.class.getName());
setName("producteur");
Filter (und Anbieter)
Nun mussten die Klassen einen Filter erstellen, um in eine Kette aufgenommen zu werden (denke ich):
- ProducteurAuthenticationFilter : Die Filterimplementierung wird erweitert
GeoServerSecurityFilter
und implementiertGeoServerAuthenticationFilter
- ProducteurAnonymousAuthenticationProvider: Wird vom Panel (oben) benötigt, um den neuen Filter zu definieren
- ProducteurAuthenticationException: Wird im AuthenticationEntryPoint verwendet (derzeit nur Http403ForbiddenEntryPoint).
Schließlich werden die Bohnen wie folgt definiert:
<bean id="yaanonymousFilterProvider" class="dgarne.java.geoserver.security.ProducteurAnonymousAuthenticationProvider"/>
<bean id="producteurAuthPanelInfo" class="dgarne.java.geoserver.security.ProducteurAuthFilterPanelInfo">
<property name="id" value="security.producteurAuthFilter" />
<property name="shortTitleKey" value="ProducteurAuthFilterPanel.short"/>
<property name="titleKey" value="ProducteurAuthFilterPanel.title"/>
<property name="descriptionKey" value="ProducteurAuthFilterPanel.description"/>
</bean>
Am Ende des Spiels habe ich in der Webadministrationsoberfläche ein neues Element im Filterfeld und es in der Standardzuordnung verwendet (siehe Abbildung unten für Referenzen):
Problembeschreibung
Hier sind wir...
Keine meiner von einem Client (OpenLayers) ausgegebenen WFS-Anforderungen, die mit der Standardzuordnung (/ **) übereinstimmen, durchläuft den definierten Filter. Beim Debuggen stellte ich fest, dass die im Spring Context definierten Filterketten niemals meine Definition enthalten, sondern immer die klassische, die entweder anonym, Digest oder Basic verwendet ...
Frage
Kann mich jemand mit einer (viel ^^) vollständigeren Dokumentation darauf hinweisen, wie ich das machen muss?