使用参数提取程序模块

该模块允许我们以URL路径片段的形式输入特定的请求参数,而不是使用查询字符串。例如,我们希望能够使用以下形式的URL应用cql_Filter:

/geoserver/<workspace>/<layer>/<filter>/ows?service=WMS&version=1.3.0&request=GetMap

作为一个简单的用法示例,如果<Filter>类似于:

K_140M

URL将变为::

/geoserver/<workspace>/<layer>/K_140M/ows?service=WMS&version=1.3.0&request=GetMap

此模块会将URL转换为新的URL::

/geoserver/<workspace>/<layer>/ows?service=WMS&version=1.3.0&request=GetMap&cql_filter=seq='K140M'

此模块由一组规则配置,这些规则将应用于传入URL。请注意,GET CAPAILITIES结果将包括维护额外过滤器的原始URL。

该模块还允许将现有的URL参数回显到GET CAPABILITY结果的结果。例如,默认情况下,以下GET CAPAILITIES请求(请注意现有的cql_Filter参数):

/geoserver/ows?service=wms&version=1.3.0&request=GetCapabilities&cql_filter=CFCC=%27D68%27

将返回一个获取功能文档,其中URL的类型为::

/geoserver/ows?SERVICE=WMS&

如果将此模块配置为回显现有的cql_Filter参数,则结果将为::

/geoserver/ows?SERVICE=WMS&CQL_FILTER=CFCC%3D%27D68%27&

该模块使用三种规则进行配置:回应参数规则、基本规则和高级规则。所有这些都可以在此模块UI中管理,该模块UI集成在Geoserver UI中。

回声参数规则

回显参数规则非常简单,它们允许我们定义某个现有的URL参数应该回显到GET CAPABILITIES结果。这种类型的规则只需要一个强制参数,它是应该回显到GET CAPABILITIES结果的现有URL参数的名称。

回声参数规则示例:

../../_images/echo_rule.png

Example of a echo parameter rule defined in the UI

此规则将回显此URL的cql_Filter::

/geoserver/ows?service=wms&version=1.3.0&request=GetCapabilities&cql_filter=CFCC=%27D68%27

获取功能结果::

/geoserver/ows?SERVICE=WMS&CQL_FILTER=CFCC%3D%27D68%27&

基本规则

基本规则允许我们处理只想从URL提取参数的简单用例。

基本规则由三个强制属性定义:

Attribute

Description

Position

要选择的URL基本路径元素的位置

Parameter

此规则生成的参数的名称

Transform

定义参数值的表达式,请使用{参数}作为所选路径元素的占位符

在定义这种类型的规则以配置URL中的现有参数应回显到GET CAPABILITIES结果时,也可以使用FOR COMMODY。

基本规则示例:

../../_images/basic_rule.png

Example of a basic rule defined in the UI

此规则将转换URL::

/geoserver/tiger/wms/H11?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap

在::

/geoserver/tiger/wms?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&CQL_FILTER=CFCC%3D%27H11%27

高级规则

高级规则使我们能够处理需要更多灵活性的更复杂的用例。

高级规则由三个强制属性和四个可选属性定义:

Attribute

Description

Mandatory

Match

正则表达式与组匹配,例如^(?:/ [^/] ){3}(/([^/]+)). $选择URL基本路径第三个元素

Activation

如果定义了此规则,则此规则将仅应用于与此正则表达式匹配的URL

不是

Parameter

此规则生成的参数的名称

Transform

定义参数值的表达式,请使用$1...$n作为匹配表达式中定义的组的占位符

Remove

要从URL中删除的匹配表达式组,默认情况下为1

不是

Combine

定义如何组合参数现有值($1现有值,$2新值),默认情况下该值被覆盖

不是

Repeat

如果已定义,则合并不仅适用于一次,而且适用于Layers参数中包括的每个层,这允许填充需要每个层的值的参数(例如Style或CQL_FILTER)

不是

在定义这种类型的规则以配置URL中的现有参数应回显到GET CAPABILITIES结果时,也可以使用FOR COMMODY。

高级规则示例:

../../_images/advanced_rule.png

Example of an advanced rule defined in the UI

此规则将转换URL::

/geoserver/tiger/wms/H11?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&CQL_FILTER=CFCC%3D%27D68%27

在::

/geoserver/tiger/wms?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&CQL_FILTER=CFCC%3D%27D68%27+or+CFCC%3D%27H11%27

不,此规则还将现有的cql_Filter参数回显到GET CAPABILITIES结果。

带有重复的高级规则示例:

../../_images/advanced_rule_repeat.png

Example of an advanced rule with repeat defined in the UI

此规则将转换URL::

/geoserver/wms/H11?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&LAYERS=tiger,other

在::

/geoserver/wms?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&LAYERS=tiger,otherCQL_FILTER=CFCC%3D%27D68%27%3BCFCC%3D%27H11%27

规则管理

可以在规则管理界面中对规则进行管理和测试。除了基本的添加、删除和更新操作外,还可以激活或停用规则。此模块将忽略停用的规则。

遵循规则管理用户界面的打印屏幕,其中包含之前定义的所有规则:

../../_images/rules_management.png

Rules management UI

请注意,第一个规则(高级规则)处于非活动状态。

休息API

规则和回应参数也可以通过REST API进行管理,该API位于 geoserver/rest/params-extractor 。有关它的文档,请参阅 Swagger format

拦截安全过滤器链

默认情况下,参数提取程序模块不与安全身份验证筛选器交互。这是因为参数提取过滤器在Geoserver过滤器链中调用的时间较晚。

如果希望参数提取程序在安全筛选器链之前工作,则必须在Geoserver WEB-INF/web.xml文件中将其配置为标准的Servlet筛选器。

这可以通过将以下代码添加到当前的web.xml(紧跟在 Set Character Encoding 筛选器)并重新启动Geoserver:

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<web-app>
    ...
    <filter>
     <filter-name>ExtractParams</filter-name>
     <filter-class>org.geoserver.params.extractor.Filter</filter-class>
    </filter>
    ...
    <filter-mapping>
      <filter-name>ExtractParams</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>
    ...
</web-app>