使用参数提取程序模块¶
该模块允许我们以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参数的名称。
回声参数规则示例:

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 |
|
要选择的URL基本路径元素的位置 |
|
此规则生成的参数的名称 |
|
定义参数值的表达式,请使用{参数}作为所选路径元素的占位符 |
在定义这种类型的规则以配置URL中的现有参数应回显到GET CAPABILITIES结果时,也可以使用FOR COMMODY。
基本规则示例:

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 |
|
正则表达式与组匹配,例如^(?:/ [^/] ){3}(/([^/]+)). $选择URL基本路径第三个元素 |
是 |
|
如果定义了此规则,则此规则将仅应用于与此正则表达式匹配的URL |
不是 |
|
此规则生成的参数的名称 |
是 |
|
定义参数值的表达式,请使用$1...$n作为匹配表达式中定义的组的占位符 |
是 |
|
要从URL中删除的匹配表达式组,默认情况下为1 |
不是 |
|
定义如何组合参数现有值($1现有值,$2新值),默认情况下该值被覆盖 |
不是 |
|
如果已定义,则合并不仅适用于一次,而且适用于Layers参数中包括的每个层,这允许填充需要每个层的值的参数(例如Style或CQL_FILTER) |
不是 |
在定义这种类型的规则以配置URL中的现有参数应回显到GET CAPABILITIES结果时,也可以使用FOR COMMODY。
高级规则示例:

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结果。
带有重复的高级规则示例:

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

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>