Створіть спеціальний фільтр автентифікації в GeoServer 2.3.0


10

Контекст

У моєму поточному проекті я вимагаю підтвердити, що запити, що надходять до GeoServer (2.3.0), дозволені.

Проект має такі факти:

  • клієнт GS не може надати основну інформацію (наприклад, пароль), сам GS не має зв'язку з репо-користувачем / роллю

Тому ми скористалися можливістю використовувати механізм фільтра автентичності, щоб перевірити:

  • дійсний запит (на певний рівень WFS) містить спеціальний заголовк HTTP (скажімо, X-CUSTOM-VALID)
  • Це заголовок - це закодоване JSON повідомлення, що містить достатньо інформації для перевірки того факту, що запит був ініційований клієнтом, який був підключений до дійсної третьої системи (ім’я користувача, секрет, такі речі)

Статус

Документація говорить нам , що ми повинні бути в змозі зробити це ...

Однак із документації не зрозуміло, як створити такі компоненти та як їх слід налаштувати.

Налагоджуючи GeoServer, мені вдалося встановити, що для налаштування такого фільтра потрібен спеціальний постачальник аутентифікації. Це, щоб мати панель в інтерфейсі веб-адміністратора (під автентифікацією, у списку Фільтрів аутентифікації)

Панель

Таким чином мій код складається з таких файлів:

  • ProducteurAuthFilterPanel.java
  • ProducteurAuthFilterPanelInfo.java
  • ProducteurAuthenticationFilterConfig.java
  • ProducteurAuthenticationFilterPanel.html

До них потрібно додати панель в інтерфейсі веб-адміністратора. ProducteurAuthFilterPanelInfoсклеює два інших разом з наступним ProducteurAuthenticationFilter(THE filter ^^).

ProducteurAuthenticationFilterConfigЗаявляє , що в його конструкторі:

setClassName(ProducteurAnonymousAuthenticationProvider.class.getName());
setName("producteur");

Фільтр (і постачальник)

Тепер класи, необхідні для створення фільтра, який слід включити до ланцюга (я думаю):

  • ProducteurAuthenticationFilter : розширення GeoServerSecurityFilterта реалізація фільтраGeoServerAuthenticationFilter
  • ProducteurAnonymousAuthenticationProvider: якось вимагається панеллю (вище) для визначення нового фільтра
  • ProducteurAuthenticationException: використовується в AuthenticationEntryPoint (наразі лише Http403ForbiddenEntryPoint)

Нарешті, квасоля визначається так:

<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>

Наприкінці гри в інтерфейсі веб-адміністратора з'явився новий елемент на панелі фільтру, і я використовував його у картографуванні за замовчуванням (див. Зображення нижче для довідок): введіть тут опис зображення

Опис проблеми

Ми на місці...

Жоден мій запит WFS, виданий клієнтом (OpenLayers), який відповідає картографуванню за замовчуванням (/ **), не проходить через визначений фільтр. Під час налагодження я виявив, що ланцюги фільтрів, визначені у Весняному контексті, ніколи не включають моє визначення, а завжди включають класичний, використовуючи або анонімний, дайджест або базовий ...

Питання

То чи може хтось вказати мені на (набагато ^^) більш повну документацію про те, як мені це зробити?

Відповіді:


1

Я роблю це шляхом реалізації проксі - сервера , як це , що може перевірити користувачів облікові дані як увійти в систему з допомогою змінних сеансу і тільки дозволяють їм доступ до ресурсів вони мають право, а саме: перевірити URL для шарів , які в даний час називаються і якщо користувач заборонити доступ не має права їх переглядати.

Якщо ви хочете обмежити користувачів певною областю або набором функцій, є два підходи.

  1. Використовуйте параметризовані перегляди SQL, щоб контролювати дані, які бачив би користувач. Ви можете використовувати проксі, щоб змінити URL-адресу перед передачею в Geoserver з параметрами, характерними для цього користувача. Ви також можете відправити параметри назад в Openlayers за допомогою Ajax Call після того, як користувач пройде автентифікацію та надасть параметри як частина виклику WMS getMAP в OpenLayers. Фактичні відображені дані можуть бути оброблені замінником змінної у SLD для фільтрації відображених даних або за допомогою зовнішніх стилів у ваших викликах WMS getMap для зміни SLD, який користувач використовує для відображення заданого рівня.

  2. Використовуйте виклик Ajax після автентифікації користувача, щоб вказати Розширення карт, щоб дозволити користувачеві пересуватися лише певним місцем. Ви також можете використовувати layerVisibility (), щоб обмежити відображення даних.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.