bağlam
Mevcut projemde, GeoServer'a (2.3.0) gelen isteklere izin verildiğini doğrulama zorunluluğum var.
Proje şu gerçeklere sahiptir:
- GS istemcisi ana bilgileri (örneğin şifre) sağlayamaz, GS'nin kendisinin bir kullanıcı / rol deposuyla bağlantısı yoktur
Bu nedenle, aşağıdakileri kontrol etmek için auth filtre mekanizmasını kullanma fırsatını yakaladık:
- geçerli bir istek (belirli bir WFS katmanına) özel bir HTTP Üstbilgisi içeriyor (diyelim X-CUSTOM-VALID)
- Bu başlık, isteğin geçerli bir üçüncü sisteme (bir kullanıcı adı, bir sır, bunun gibi şeyler) bağlı bir istemci tarafından başlatıldığını doğrulamak için yeterli bilgiyi tutan JSON kodlu bir iletidir.
durum
Dokümantasyon bunu yapmaya muktedir gerektiğini bize anlatıyor ...
Bununla birlikte, belgeler bu tür bileşenlerin nasıl oluşturulacağı ve nasıl yapılandırılması gerektiği konusunda net değildir.
GeoServer Hata Ayıklama Böyle bir filtreyi yapılandırmak için özel bir Kimlik Doğrulama Sağlayıcısı gerektirir. Bu, web yöneticisi arayüzünde bir panel olması için (kimlik doğrulama altında, Kimlik Doğrulama Filtreleri listesinde)
Panel
Böylece benim kod bu dosyalardan oluşur:
- ProducteurAuthFilterPanel.java
- ProducteurAuthFilterPanelInfo.java
- ProducteurAuthenticationFilterConfig.java
- ProducteurAuthenticationFilterPanel.html
Bunların Web Yönetici Arayüzüne bir panel eklemesi gerekir. birbiri ardına ProducteurAuthFilterPanelInfo
yapıştırıcıyı ProducteurAuthenticationFilter
( filtre ^ ^) yapıştırmaktadır .
ProducteurAuthenticationFilterConfig
Onun kurucu beyan eder:
setClassName(ProducteurAnonymousAuthenticationProvider.class.getName());
setName("producteur");
Filtre (ve Sağlayıcı)
Şimdi, sınıfların bir zincire dahil edilmesi için bir filtre oluşturması gerekiyordu (sanırım):
- ProducteurAuthenticationFilter : genişleten
GeoServerSecurityFilter
ve uygulayan filtre uygulamasıGeoServerAuthenticationFilter
- ProducteurAnonymousAuthenticationProvider: Panel tarafından (yukarıdaki) yeni filtreyi tanımlamak için bir şekilde gerekli
- ProducteurAuthenticationException: AuthenticationEntryPoint'te kullanılır (şimdilik yalnızca Http403ForbiddenEntryPoint)
Son olarak, fasulye şöyle tanımlanır:
<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>
Oyunun sonunda, Web Yönetici Arayüzünde filtre panelinde yeni bir Öğe var ve varsayılan eşlemede kullandım (referanslar için aşağıdaki resme bakın):
Sorun Açıklaması
Buradayız...
Varsayılan eşleme (/ **) ile eşleşen bir istemci (OpenLayers) tarafından verilen WFS isteğimin hiçbiri tanımlanan Filtreden geçmiyor. Hata ayıklama sırasında, Bahar Bağlamında tanımlanan filtre zincirlerinin asla tanımımı içermediğini, ancak her zaman anonim, sindirim veya temel kullanarak klasik zincirleri içerdiğini buldum ...
Soru
Öyleyse bana bunu nasıl yapmak zorunda olduğum hakkında (çok ^^) daha eksiksiz bir belge ile işaret edebilecek biri var mı?