สร้างตัวกรองการรับรองความถูกต้องที่กำหนดเองใน GeoServer 2.3.0


10

บริบท

ในโครงการปัจจุบันของฉันฉันมีข้อกำหนดในการตรวจสอบว่าคำขอที่มาถึง GeoServer (2.3.0) ได้รับอนุญาต

โครงการถือข้อเท็จจริงเหล่านั้น:

  • ลูกค้า GS ไม่สามารถให้ข้อมูลหลัก (เช่นรหัสผ่าน) GS เองไม่มีการเชื่อมต่อกับผู้ใช้ / บทบาท repo

ดังนั้นเราจึงใช้โอกาสในการใช้กลไกการตรวจสอบความถูกต้องเพื่อตรวจสอบว่า:

  • คำขอที่ถูกต้อง (สำหรับเลเยอร์ WFS ที่เฉพาะเจาะจง) มีส่วนหัว HTTP พิเศษ (สมมติว่า X-CUSTOM-VALID)
  • ส่วนหัวนี้เป็นข้อความที่เข้ารหัสของ JSON ซึ่งมีข้อมูลเพียงพอที่จะตรวจสอบความจริงที่ว่าคำขอนั้นเริ่มต้นโดยไคลเอนต์ที่เชื่อมต่อกับระบบที่สามที่ถูกต้อง (ชื่อผู้ใช้, ความลับ, ข้อมูลอื่น ๆ )

สถานะ

เอกสารจะบอกเราว่าเราควรจะสามารถที่จะทำเช่นนั้น ...

อย่างไรก็ตามเอกสารประกอบยังไม่ชัดเจนว่าจะสร้างองค์ประกอบดังกล่าวอย่างไรและควรกำหนดค่าอย่างไร

การดีบัก GeoServer ฉันจัดการเพื่อค้นหาว่าการกำหนดค่าตัวกรองดังกล่าวนั้นต้องการผู้ให้บริการการรับรองความถูกต้องเฉพาะ เพื่อให้มีพาเนลในส่วนติดต่อผู้ดูแลเว็บ (ภายใต้การรับรองความถูกต้องในรายการตัวกรองการตรวจสอบความถูกต้อง)

แผงหน้าปัด

ดังนั้นรหัสของฉันประกอบด้วยไฟล์เหล่านี้:

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

สิ่งเหล่านี้จำเป็นต้องเพิ่มพาเนลใน Web Admin Interface ProducteurAuthFilterPanelInfoกำลังกาวกันและกันพร้อมกับProducteurAuthenticationFilterhere-after ( ตัวกรอง ^^)

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>

ในตอนท้ายของเกมใน Web Admin Interface ฉันมีรายการใหม่ในแผงกรองและฉันใช้ในการแมปเริ่มต้น (ดูภาพด้านล่างสำหรับการอ้างอิง): ป้อนคำอธิบายรูปภาพที่นี่

คำอธิบายปัญหา

ที่นี่เราอยู่ ...

ไม่มีคำขอ WFS ของฉันที่ออกโดยไคลเอนต์ (OpenLayers) ซึ่งกำลังจับคู่การแมปเริ่มต้น (/ **) กำลังผ่านตัวกรองที่กำหนด ในขณะที่การดีบั๊กฉันพบว่าโซ่ตัวกรองที่กำหนดไว้ใน Spring Context ไม่เคยมีคำจำกัดความของฉัน แต่จะรวมถึงการใช้แบบคลาสสิกโดยใช้แบบไม่ระบุชื่อแบบแยกย่อยหรือพื้นฐาน ...

คำถาม

ดังนั้นมีใครสามารถชี้ให้ฉันเห็นเอกสารที่สมบูรณ์มากขึ้น (^^) เกี่ยวกับวิธีที่ฉันต้องทำ?

คำตอบ:


1

ฉันทำได้โดยใช้พร็อกซีเช่นนี้ที่สามารถตรวจสอบข้อมูลประจำตัวของผู้ใช้ว่าเข้าสู่ระบบโดยใช้ตัวแปรเซสชันและอนุญาตให้พวกเขาเข้าถึงทรัพยากรที่พวกเขามีสิทธิ์เท่านั้นเช่น: ตรวจสอบ URL สำหรับเลเยอร์ที่ถูกเรียกและปฏิเสธการเข้าถึงถ้าผู้ใช้ ไม่ได้รับอนุญาตให้ดู

หากคุณต้องการ จำกัด ผู้ใช้ในพื้นที่หรือชุดคุณลักษณะเฉพาะมีสองวิธีคือ ..

  1. ใช้Parameterized SQL Viewsเพื่อควบคุมข้อมูลที่ผู้ใช้จะเห็น คุณสามารถใช้พร็อกซีเพื่อเปลี่ยน URL ก่อนที่มันจะถูกส่งผ่านไปยัง Geoserver ด้วยพารามิเตอร์เฉพาะสำหรับผู้ใช้นั้น คุณสามารถส่งพารามิเตอร์กลับไปยัง Openlayers ผ่านการโทร Ajax หลังจากผู้ใช้ผ่านการรับรองความถูกต้องและระบุพารามิเตอร์เป็นส่วนหนึ่งของการโทร WMS getMAP ใน OpenLayers ข้อมูลจริงที่แสดงสามารถจัดการได้โดยการแทนที่ตัวแปรใน SLDเพื่อกรองข้อมูลที่แสดงหรือโดยใช้ลักษณะภายนอกในการเรียก WMS getMap ของคุณเพื่อเปลี่ยน SLD ที่ผู้ใช้ใช้เพื่อแสดงเลเยอร์ที่กำหนด

  2. ใช้ Ajax Call หลังจากการตรวจสอบความถูกต้องของผู้ใช้เพื่อระบุMap Extentsเพื่ออนุญาตเฉพาะผู้ใช้ที่มีอิทธิพลในพื้นที่ที่ระบุ คุณสามารถใช้ layerVisibility () เพื่อ จำกัด ข้อมูลที่จะแสดงเช่นกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.