参数提取程序

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

/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

这个模块将把网址转换成新的网址:

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

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

该模块还提供了将现有URL参数回送到获取功能结果的可能性。例如,默认情况下,以下获取功能请求(注意现有的cql_filter参数)::

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

如果URL的类型为::

/geoserver/ows?SERVICE=WMS&

如果将此模块配置为回显现有的cql_过滤器参数,结果将为:

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

此模块使用三种类型的规则进行配置:回声参数规则、基本规则和高级规则。所有这些都可以在集成在geoserver ui中的模块ui中进行管理。

回波参数规则

echo参数规则非常简单,它们允许我们定义某个现有的url参数应该被回送到一个get-capabilities结果中。这种类型的规则只需要一个强制参数,该参数是现有URL参数的名称,该参数应回送到get capabilities结果中。

echo参数规则示例:

../../_images/echo_rule.png

UI中定义的echo参数规则示例

此规则将回送此URL的cql_筛选器:

/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中的现有参数回送到获取功能结果时,也可以使用for commodity。

基本规则示例:

../../_images/basic_rule.png

用户界面中定义的基本规则示例

此规则将转换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

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

Parameter

此规则生成的参数的名称

是的

Transform

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

是的

Remove

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

Combine

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

Repeat

如果定义了Combine,则它不仅应用一次,而且还应用于包含在layers参数中的每个层,这允许填充需要每个层值的参数(例如样式或cql_过滤器)。

在定义此类规则以配置应将URL中的现有参数回送到获取功能结果时,也可以使用for commodity。

高级规则示例:

../../_images/advanced_rule.png

用户界面中定义的高级规则示例

此规则将转换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_筛选器参数回送到get capabilities结果。

带重复的高级规则示例:

../../_images/advanced_rule_repeat.png

在UI中定义了repeat的高级规则示例

此规则将转换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

规则管理

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

使用之前定义的所有规则,按照规则管理界面的打印屏幕操作:

../../_images/rules_management.png

规则管理界面

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

休息API

规则和echo参数也可以通过位于 geoserver/rest/params-extractor . 它的文档可在 Swagger format

拦截安全过滤器链

默认情况下,params提取器模块不与安全身份验证筛选器交互。这是因为params提取器过滤器稍后在GeoServer过滤器链中调用。

如果希望params提取器在安全过滤器链之前工作,则必须将其配置为GeoServer WEB-INF中的标准servlet过滤器/web.xml文件文件。

可以将以下内容添加到当前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>