Konteks
Dalam proyek saya saat ini, saya memiliki persyaratan untuk memvalidasi bahwa permintaan yang datang ke GeoServer (2.3.0) diizinkan.
Proyek memegang fakta-fakta itu:
- klien GS tidak dapat memberikan informasi utama (kata sandi misalnya), GS itu sendiri tidak memiliki koneksi dengan repo pengguna / peran
Jadi kami mengambil kesempatan untuk menggunakan mekanisme filter auth untuk memeriksa bahwa:
- permintaan yang valid (ke lapisan WFS tertentu) berisi HTTP Header khusus (misalkan X-CUSTOM-VALID)
- Header ini adalah pesan yang disandikan JSON yang menyimpan informasi yang cukup untuk memvalidasi fakta bahwa permintaan tersebut diprakarsai oleh klien yang terhubung ke sistem ketiga yang valid (nama pengguna, rahasia, hal-hal seperti itu)
Status
The dokumentasi mengatakan kepada kita bahwa kita harus bisa melakukannya ...
Namun, dokumentasi tidak jelas cara membuat komponen seperti itu dan bagaimana mereka harus dikonfigurasi.
Debugging GeoServer Saya berhasil menemukan bahwa untuk mengkonfigurasi filter semacam itu, diperlukan Penyedia Autentikasi khusus. Itu, untuk memiliki panel di antarmuka admin web (di bawah otentikasi, dalam daftar Filter Otentikasi)
Panel
Jadi kode saya terdiri dari file-file itu:
- ProducteurAuthFilterPanel.java
- ProducteurAuthFilterPanelInfo.java
- ProducteurAuthenticationFilterConfig.java
- ProducteurAuthenticationFilterPanel.html
Ini diperlukan untuk menambahkan panel di Antarmuka Admin Web. ProducteurAuthFilterPanelInfo
adalah merekatkan keduanya bersama dengan yang ProducteurAuthenticationFilter
berikut (THE filter ^^).
Yang ProducteurAuthenticationFilterConfig
menyatakan bahwa dalam konstruktornya:
setClassName(ProducteurAnonymousAuthenticationProvider.class.getName());
setName("producteur");
Filter (dan Penyedia)
Sekarang, kelas-kelas yang diperlukan untuk membuat filter untuk dimasukkan dalam rantai (saya kira):
- ProducteurAuthenticationFilter : implementasi filter memperluas
GeoServerSecurityFilter
dan mengimplementasikanGeoServerAuthenticationFilter
- ProducteurAnonymousAuthenticationProvider: entah bagaimana diperlukan oleh Panel (di atas) untuk mendefinisikan filter baru
- ProducteurAuthenticationException: digunakan dalam AuthenticationEntryPoint (hanya Http403ForbiddenEntryPoint untuk saat ini)
Akhirnya, kacang didefinisikan seperti:
<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>
Di akhir permainan, di Antarmuka Admin Web saya memiliki Item baru di panel filter, dan saya menggunakannya dalam pemetaan default (lihat gambar di bawah untuk referensi):
Deskripsi masalah
Di sini kita ...
Tidak ada permintaan WFS saya yang dikeluarkan oleh klien (OpenLayers) yang cocok dengan pemetaan default (/ **) melalui Filter yang ditentukan. Saat debugging saya menemukan bahwa rantai filter yang didefinisikan dalam Konteks Musim Semi tidak pernah termasuk definisi saya, tetapi selalu termasuk yang klasik menggunakan baik anonim, intisari atau dasar ...
Pertanyaan
Jadi, adakah yang bisa menunjukkan saya dengan (banyak ^^) dokumentasi yang lebih lengkap tentang bagaimana saya harus melakukannya?