参数提取程序¶
这个模块允许我们输入特定的请求参数作为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参数规则示例:

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 |
|
要选择的URL基路径元素的位置 |
|
此规则生成的参数的名称 |
|
定义参数值的表达式,使用参数作为所选路径元素的占位符 |
在定义此类规则以配置应将URL中的现有参数回送到获取功能结果时,也可以使用for commodity。
基本规则示例:

用户界面中定义的基本规则示例¶
此规则将转换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 |
|
正则表达式与组匹配,例如^(?)?:/ [^/] [){{3}}(/([^/]+)).] $选择URL基路径第三个元素 |
是的 |
|
如果已定义,则此规则将仅应用于与此regex表达式匹配的URL |
不 |
|
此规则生成的参数的名称 |
是的 |
|
定义参数值的表达式,使用$1…$N作为匹配表达式中定义的组的占位符 |
是的 |
|
默认情况下从URL中删除的匹配表达式组1 |
不 |
|
定义如何组合参数现有值($1现有值,$2新值),默认情况下该值被重写 |
不 |
|
如果定义了Combine,则它不仅应用一次,而且还应用于包含在layers参数中的每个层,这允许填充需要每个层值的参数(例如样式或cql_过滤器)。 |
不 |
在定义此类规则以配置应将URL中的现有参数回送到获取功能结果时,也可以使用for commodity。
高级规则示例:

用户界面中定义的高级规则示例¶
此规则将转换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结果。
带重复的高级规则示例:

在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中管理和测试规则。除了添加、删除和更新等基本操作外,还可以激活或停用规则。此模块将忽略已停用的规则。
使用之前定义的所有规则,按照规则管理界面的打印屏幕操作:

规则管理界面¶
请注意,第一个规则(高级规则)未处于活动状态。
休息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>