Tạo bộ lọc Xác thực tùy chỉnh trong GeoServer 2.3.0


10

Bối cảnh

Trong dự án hiện tại của tôi, tôi đã yêu cầu xác thực rằng các yêu cầu đến GeoServer (2.3.0) được cho phép.

Dự án nắm giữ những sự thật:

  • Máy khách GS không thể cung cấp thông tin chính (ví dụ mật khẩu), bản thân GS không có kết nối với repo người dùng / vai trò

Vì vậy, chúng tôi đã nhân cơ hội sử dụng cơ chế lọc auth để kiểm tra xem:

  • một yêu cầu hợp lệ (đối với lớp WFS cụ thể) có chứa Tiêu đề HTTP đặc biệt (giả sử X-CUSTOM-VALID)
  • Tiêu đề này là một thông điệp được mã hóa JSON chứa đủ thông tin để xác thực thực tế rằng yêu cầu được bắt đầu bởi một khách hàng được kết nối với hệ thống thứ ba hợp lệ (tên người dùng, bí mật, những thứ tương tự)

Trạng thái

Các tài liệu hướng dẫn cho chúng ta biết rằng chúng ta sẽ có thể làm như vậy ...

Tuy nhiên, tài liệu không rõ làm thế nào để tạo ra các thành phần như vậy và cách chúng nên được cấu hình.

Gỡ lỗi GeoServer Tôi quản lý để thấy rằng để định cấu hình bộ lọc như vậy, nó yêu cầu Nhà cung cấp xác thực chuyên dụng. Điều đó, để có một bảng điều khiển trong giao diện quản trị web (theo xác thực, trong danh sách Bộ lọc xác thực)

Bảng điều khiển

Do đó, mã của tôi bao gồm các tệp đó:

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

Đây là những yêu cầu để thêm một bảng điều khiển trong Giao diện quản trị web. ProducteurAuthFilterPanelInfođang dán hai cái kia cùng với cái ProducteurAuthenticationFiltersau này ( bộ lọc ^^).

Các ProducteurAuthenticationFilterConfigtuyên bố rằng trong constructor của nó:

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

Bộ lọc (và Nhà cung cấp)

Bây giờ, các lớp cần thiết để tạo bộ lọc được bao gồm trong chuỗi (tôi đoán):

  • ProducteurAuthenticationFilter : triển khai GeoServerSecurityFiltervà triển khai bộ lọcGeoServerAuthenticationFilter
  • ProducteurAnonymousAuthenticationProvider: bằng cách nào đó được yêu cầu bởi Hội đồng (ở trên) để xác định bộ lọc mới
  • ProducteurAuthenticationException: được sử dụng trong Xác thựcEntryPoint (hiện chỉ có http403ForbiddenEntryPoint)

Cuối cùng, các hạt được định nghĩa như vậy:

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

Vào cuối trò chơi, trong Giao diện quản trị web, tôi có một Mục mới trong bảng điều khiển bộ lọc và tôi đã sử dụng nó trong ánh xạ mặc định (xem hình ảnh bên dưới để tham khảo): nhập mô tả hình ảnh ở đây

Mô tả vấn đề

Chúng ta ở đây ...

Không có yêu cầu WFS nào của tôi do khách hàng (OpenLayers) phù hợp với ánh xạ mặc định (/ **) đi qua Bộ lọc được xác định. Trong khi gỡ lỗi, tôi thấy rằng các chuỗi bộ lọc được xác định trong Bối cảnh mùa xuân không bao giờ bao gồm định nghĩa của tôi, mà luôn luôn bao gồm cả chuỗi cổ điển sử dụng ẩn danh, tiêu hóa hoặc cơ bản ...

Câu hỏi

Vì vậy, có ai có thể chỉ cho tôi một tài liệu đầy đủ hơn (nhiều ^^) về cách tôi phải làm điều đó không?

Câu trả lời:


1

Tôi làm điều đó bằng cách triển khai Proxy như thế này có thể xác minh thông tin đăng nhập của người dùng khi đăng nhập bằng biến phiên và chỉ cho phép họ truy cập tài nguyên mà họ có quyền, tức là: kiểm tra url cho các lớp được gọi và từ chối truy cập nếu người dùng không được phép xem chúng.

Nếu bạn muốn giới hạn người dùng trong một khu vực hoặc bộ tính năng cụ thể, có hai cách tiếp cận ..

  1. Sử dụng Chế độ xem SQL được tham số hóa để kiểm soát dữ liệu người dùng sẽ thấy. Bạn có thể sử dụng Proxy để thay đổi url trước khi nó được chuyển đến Geoserver với các tham số dành riêng cho người dùng đó. Bạn cũng có thể gửi lại các tham số cho Openlayers thông qua Cuộc gọi Ajax sau khi người dùng được xác thực và cung cấp các tham số như một phần của lệnh gọi WMS getMAP trong OpenLayers. Dữ liệu thực tế được hiển thị có thể được xử lý bằng cách thay thế Biến trong SLD để lọc dữ liệu được hiển thị hoặc bằng cách sử dụng Kiểu ngoài trong các lệnh gọi WMS getMap để thay đổi SLD mà người dùng sử dụng để hiển thị một lớp nhất định.

  2. Sử dụng Cuộc gọi Ajax sau khi Xác thực người dùng để chỉ định Mức độ bản đồ để chỉ cho phép người dùng di chuyển xung quanh một khu vực được chỉ định. Bạn cũng có thể sử dụng layerVisibility () để hạn chế dữ liệu nào có thể được hiển thị.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.