Kontekst
W moim bieżącym projekcie wymagam sprawdzenia, czy żądania przychodzące do GeoServer (2.3.0) są dozwolone.
Projekt zawiera następujące fakty:
- klient GS nie może podać głównych informacji (na przykład hasła), sam GS nie ma połączenia z repozytorium użytkownika / roli
Skorzystaliśmy więc z okazji, aby użyć mechanizmu filtra uwierzytelniania, aby sprawdzić, czy:
- prawidłowe żądanie (do określonej warstwy WFS) zawiera specjalny nagłówek HTTP (powiedzmy X-CUSTOM-VALID)
- Ten nagłówek jest zakodowaną w JSON wiadomością zawierającą wystarczającą ilość informacji, aby potwierdzić fakt, że żądanie zostało zainicjowane przez klienta, który był podłączony do prawidłowego trzeciego systemu (nazwa użytkownika, klucz tajny itp.)
Status
Dokumentacja mówi nam, że powinniśmy być w stanie to zrobić ...
Jednak dokumentacja nie wyjaśnia, jak tworzyć takie komponenty i jak należy je konfigurować.
Debugowanie GeoServer Udało mi się znaleźć, że aby skonfigurować taki filtr, wymaga dedykowanego dostawcy uwierzytelniania. Żeby mieć panel w interfejsie administratora sieci (w ramach uwierzytelnień, na liście filtrów uwierzytelniania)
Płyta
Zatem mój kod składa się z tych plików:
- ProducteurAuthFilterPanel.java
- ProducteurAuthFilterPanelInfo.java
- ProducteurAuthenticationFilterConfig.java
- ProducteurAuthenticationFilterPanel.html
Wymagają one dodania panelu w interfejsie administratora sieci. ProducteurAuthFilterPanelInfo
przykleja dwa pozostałe wraz z ProducteurAuthenticationFilter
późniejszym ( filtr ^^).
ProducteurAuthenticationFilterConfig
Deklaruje, że w jego konstruktora:
setClassName(ProducteurAnonymousAuthenticationProvider.class.getName());
setName("producteur");
Filtruj (i dostawca)
Teraz klasy musiały stworzyć filtr, który ma zostać włączony do łańcucha (tak myślę):
- ProducteurAuthenticationFilter : rozszerzenie
GeoServerSecurityFilter
i rozszerzenie implementacji filtraGeoServerAuthenticationFilter
- ProducteurAnonymousAuthenticationProvider: jakoś wymagany przez Panel (powyżej) do zdefiniowania nowego filtra
- ProducteurAuthenticationException: używany w AuthenticationEntryPoint (na razie tylko Http403ForbiddenEntryPoint)
Wreszcie fasole są zdefiniowane w następujący sposób:
<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>
Pod koniec gry, w interfejsie administratora sieci, mam nowy element w panelu filtrów i użyłem go w domyślnym odwzorowaniu (odnośniki znajdują się na obrazku poniżej):
Opis problemu
Oto jesteśmy ...
Żadne z moich żądań WFS wydanych przez klienta (OpenLayers), które pasują do domyślnego mapowania (/ **), nie przechodzi przez zdefiniowany Filtr. Podczas debugowania odkryłem, że łańcuchy filtrów zdefiniowane w kontekście wiosennym nigdy nie uwzględniają mojej definicji, ale raczej zawsze obejmują klasyczny z użyciem anonimowego, streszczenia lub podstawowego ...
Pytanie
Czy ktoś jest w stanie wskazać mi (dużo ^^) pełniejszą dokumentację dotyczącą tego, jak mam to zrobić?