You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GeoServer 2.22.0中SimpleFeatureSource实现类请求头未更新问题

GeoServer 2.22.0 请求头缓存及Cookie获取异常问题

我们在项目中使用GeoServer 2.22.0,通过实现org.geotools.data.simple.SimpleFeatureSource类包装常规JDBC要素源,以此应用自定义过滤器。该实现类依赖GeoServer请求头内容的正确性,但发现首次请求处理后,后续请求中需要更新的请求头内容并未按预期更新,疑似GeoServer缓存了请求头信息。

具体实现

重写了getFeatures方法:

@Override
public SimpleFeatureCollection getFeatures(Query query) throws IOException;

实现代码细节:

public SimpleFeatureCollection getFeatures(Query query) throws IOException {
   Request request = Dispatcher.REQUEST.get();
   ...
   HttpServletRequest owsRequest = request.getHttpRequest();
   
   Enumeration<String> headerNames = owsRequest.getHeaderNames();
   
   // 步骤1:输出请求头内容
   while (headerNames.hasMoreElements()) {
      String headerName = (String) headerNames.nextElement();
      // 输出headerName及其值:owsRequest.getHeader(headerName)
      // 注意:请求头中可能包含"cookie"
   }

   // 步骤2:另一种获取Cookie的方式
   if (owsRequest.getCookies() != null ) {
      for (Cookie cookie: owsRequest.getCookies()) {
         // 输出Cookie内容(cookie.getName()和cookie.getValue())
      }
   }
}

测试场景

首次请求使用curl命令发送:

curl '<URL>' \
  -H 'authority: XXXXXX' \
  -H 'accept: application/json, text/plain, */*' \
  -H 'accept-language: en-US,en;q=0.9,fr;q=0.8' \
  -H 'content-type: application/x-www-form-urlencoded' \
  -H 'cookie: cookieName1=cookieValue1; cookieName2=cookieValue2; cookieName3=cookieValue3' \
  -H 'sec-ch-ua: "Google Chrome";v="119", "Chromium";v="119", "Not?A_Brand";v="24"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "Windows"' \
  -H 'sec-fetch-dest: empty' \
  -H 'sec-fetch-mode: cors' \
  -H 'sec-fetch-site: same-origin' \
  -H 'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36' \
  --data-raw $'service=WFS&request=GetFeature&srsname=EPSG:3857&outputFormat=application/json&efr=false&typeNames=xxxx&count=200&version=2.0.0&sortBy=yyy A&cql_filter=<someFilter>' \
  --compressed

可在curl命令中添加自定义测试头:-H 'yourHeaderName: yourHeaderValue'

异常现象

  • 发送第二个请求时修改自定义头的值,后续请求的头值始终停留在首次请求的内容,未更新。
  • owsRequest.getCookies()起初能返回正确Cookie(与owsRequest.getHeader('cookie')返回内容不同),但一段时间后返回null,无法获取任何Cookie信息。

内容的提问来源于stack exchange,提问作者jtour

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 00:53:18