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

Web Admin Interface에 패널을 추가해야합니다. ProducteurAuthFilterPanelInfo다음과 함께 두 가지를 붙입니다 ProducteurAuthenticationFilter(THE 필터 ^^).

ProducteurAuthenticationFilterConfig선언자는 생성자에서 다음을 선언합니다.

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

필터 및 공급자

이제 클래스는 체인에 포함 할 필터를 만들어야했습니다.

  • ProducteurAuthenticationFilter : 확장 GeoServerSecurityFilter및 구현 필터 구현GeoServerAuthenticationFilter
  • ProducteurAnonymousAuthenticationProvider : 어쨌든 새 필터를 정의하기 위해 패널 (위)에 필요합니다.
  • ProducteurAuthenticationException : AuthenticationEntryPoint에서 사용됨 (현재는 Http403ForbiddenEntryPoint 만 해당)

마지막으로 Bean은 다음과 같이 정의됩니다.

<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에서 필터 패널에 새 항목을 만들고 기본 매핑에서 사용했습니다 (아래 이미지 참조). 여기에 이미지 설명을 입력하십시오

문제 설명

여기 우리는 ...

기본 매핑 (/ **)과 일치하는 클라이언트 (OpenLayers)가 발행 한 WFS 요청이 정의 된 필터를 거치지 않습니다. 디버깅하는 동안 Spring Context에 정의 된 필터 체인에는 내 정의가 포함되지 않지만 익명, 다이제스트 또는 기본을 사용하여 항상 고전적인 것을 포함한다는 것이 발견되었습니다 ...

질문

그래서 내가 해야하는 방법에 대한 더 완벽한 문서로 나를 지적 할 수있는 사람이 있습니까?

답변:


1

내가 좋아하는 프록시를 구현하여 그것을 할 호출되고있는 층의 URL을 확인하고 사용자의 경우 액세스를 거부 : 세션 변수를 사용하여 로그인으로 사용자의 자격 증명을 확인하고 그들 만이받을 수 있습니다 리소스에 액세스, 즉에게 허용 할 수있는 볼 권한이 없습니다.

사용자를 특정 영역이나 기능 세트로 제한하려면 두 가지 접근 방식이 있습니다.

  1. 매개 변수화 된 SQL보기 를 사용 하여 사용자에게 표시되는 데이터를 제어하십시오. 프록시를 사용하여 URL을 해당 사용자에게 고유 한 매개 변수로 Geoserver에 전달되기 전에 URL을 변경할 수 있습니다. 또한 사용자가 인증 된 후 Ajax 호출을 통해 매개 변수를 다시 Openlayers로 전송하고 OpenLayers에서 WMS getMAP 호출의 일부로 매개 변수를 제공 할 수 있습니다. 표시된 실제 데이터는 표시된 데이터 를 필터링하기 위해 SLD의 변수 대체 또는 WMS getMap 호출에서 외부 스타일 을 사용하여 사용자가 지정된 계층을 표시하는 데 사용하는 SLD를 변경하여 처리 할 수 ​​있습니다 .

  2. 사용자 인증 후 Ajax 호출을 사용하여 사용자가 지정된 영역 주위에서만 움직일 수 있도록 맵 범위 를 지정하십시오. layerVisibility ()를 사용하여 표시 할 수있는 데이터를 제한 할 수도 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.