语境
在我当前的项目中,我需要验证是否允许传入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界面中添加面板所必需的。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界面中,我在过滤器面板中有一个新Item,并在默认映射中使用了它(请参见下图以获取参考):
问题描述
我们到了...
客户端(OpenLayers)发出的与默认映射(/ **)匹配的WFS请求都没有通过定义的过滤器。在调试时,我发现在Spring Context中定义的过滤器链从不包含我的定义,而是始终包括使用匿名,摘要或基本的经典链。
题
那么,有没有人能够向我指出有关如何执行此操作的(更多^^)更完整的文档?