Contesto
Nel mio progetto attuale, ho l'obbligo di convalidare che le richieste in arrivo su GeoServer (2.3.0) sono consentite.
Il progetto contiene questi fatti:
- il client GS non può fornire le informazioni principali (ad esempio la password), GS stesso non ha alcuna connessione con un repo utente / ruolo
Quindi abbiamo colto l'occasione per utilizzare il meccanismo di filtro auth per verificare che:
- una richiesta valida (a un livello WFS specifico) contiene un'intestazione HTTP speciale (diciamo X-CUSTOM-VALID)
- Questa intestazione è un messaggio codificato JSON che contiene informazioni sufficienti per convalidare il fatto che la richiesta è stata avviata da un client che era collegato a un terzo sistema valido (un nome utente, un segreto, cose del genere)
Stato
La documentazione ci dice che dovremmo essere in grado di farlo ...
Tuttavia, la documentazione non è chiara su come creare tali componenti e su come configurarli.
Debugging GeoServer Sono riuscito a scoprire che per configurare un tale filtro, richiede un provider di autenticazione dedicato. Quello, per avere un pannello nell'interfaccia di amministrazione web (sotto autenticazioni, nell'elenco Filtri di autenticazione)
Pannello
Quindi il mio codice è composto da quei file:
- ProducteurAuthFilterPanel.java
- ProducteurAuthFilterPanelInfo.java
- ProducteurAuthenticationFilterConfig.java
- ProducteurAuthenticationFilterPanel.html
Questi sono necessari per aggiungere un pannello nell'interfaccia di amministrazione Web. ProducteurAuthFilterPanelInfo
sta incollando gli altri due insieme al seguente ProducteurAuthenticationFilter
(IL filtro ^^).
L' ProducteurAuthenticationFilterConfig
dichiara che nel suo costruttore:
setClassName(ProducteurAnonymousAuthenticationProvider.class.getName());
setName("producteur");
Filtro (e provider)
Ora, le classi necessarie per creare un filtro da includere in una catena (suppongo):
- ProducteurAuthenticationFilter : l'implementazione del filtro si estende
GeoServerSecurityFilter
e si implementaGeoServerAuthenticationFilter
- ProducteurAnonymousAuthenticationProvider: in qualche modo richiesto dal Pannello (sopra) per definire il nuovo filtro
- ProducteurAuthenticationException: utilizzato in AuthenticationEntryPoint (solo Http403ForbiddenEntryPoint per ora)
Infine, i bean sono definiti in questo modo:
<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>
Alla fine del gioco, nell'interfaccia di amministrazione Web ho un nuovo oggetto nel pannello dei filtri e l'ho usato nella mappatura predefinita (vedi l'immagine sotto per i riferimenti):
Descrizione del problema
Eccoci qui...
Nessuna delle mie richieste WFS emesse da un client (OpenLayers) che corrispondono alla mappatura predefinita (/ **) passa attraverso il filtro definito. Durante il debug ho scoperto che le catene di filtri definite nel contesto di primavera non includono mai la mia definizione, ma piuttosto includono sempre quella classica usando anonimo, digest o di base ...
Domanda
Quindi c'è qualcuno in grado di indicarmi con una (molto ^^) documentazione più completa su come devo farlo?