在GeoServer 2.3.0中创建自定义身份验证过滤器


10

语境

在我当前的项目中,我需要验证是否允许传入GeoServer(2.3.0)的请求。

该项目包含以下事实:

  • GS客户端无法提供主体信息(例如密码),GS本身与用户/角色回购无关

因此,我们借此机会使用auth过滤器机制来检查以下内容:

  • 一个有效的请求(到特定的WFS层)包含一个特殊的HTTP标头(例如X-CUSTOM-VALID)
  • 此标头是JSON编码的消息,其中包含足够的信息以验证以下事实:请求是由连接到有效第三系统的客户端发起的(用户名,机密之类的东西)

状态

文件告诉我们,我们应该能够做到这一点?

但是,文档尚不清楚如何创建此类组件以及应如何配置它们。

调试GeoServer我设法找到要配置这样的过滤器,它需要专用的身份验证提供程序。为了在Web管理界面中拥有一个面板(在身份验证下,在“身份验证过滤器”列表中)

面板

因此,我的代码由以下文件组成:

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

这些是在Web Admin界面中添加面板所必需的。ProducteurAuthFilterPanelInfoProducteurAuthenticationFilter后面的内容(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界面中,我在过滤器面板中有一个新Item,并在默认映射中使用了它(请参见下图以获取参考): 在此处输入图片说明

问题描述

我们到了...

客户端(OpenLayers)发出的与默认映射(/ **)匹配的WFS请求都没有通过定义的过滤器。在调试时,我发现在Spring Context中定义的过滤器链从不包含我的定义,而是始终包括使用匿名,摘要或基本的经典链。

那么,有没有人能够向我指出有关如何执行此操作的(更多^^)更完整的文档?

Answers:


1

我通过实现代理喜欢做这个检查网址是否正在调用层,如果用户拒绝访问:可以验证用户凭据登录使用会话变量,只有让他们他们有权访问的资源,即无权查看它们。

如果要限制用户使用特定区域或功能集,则有两种方法。

  1. 使用参数化SQL视图控制用户将看到哪些数据。您可以使用Proxy更改url,然后再使用该用户特定的参数将其传递给Geoserver。您还可以在用户通过身份验证后通过Ajax调用将参数发送回Openlayers,并将其作为OpenLayers中WMS getMAP调用的一部分提供。显示的实际数据可以通过SLD中变量替换来过滤显示的数据,也可以通过在WMS getMap调用中使用外部样式来更改用户用来显示给定图层的SLD来处理。

  2. 用户认证后使用Ajax调用来指定Map Extent,以仅允许用户在指定区域内移动。您还可以使用layerVisibility()来限制可以显示哪些数据。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.