当前位置: 代码迷 >> 综合 >> geoserver 禁止打包导出shp文件,以及简单的token验证
  详细解决方案

geoserver 禁止打包导出shp文件,以及简单的token验证

热度:20   发布时间:2023-12-03 09:07:58.0

参考文章:https://www.osgeo.cn/geoserver-user-manual/extensions/authkey/index.html

之前一段时间没留意geoserver的一些功能,突然有一天,同事跟我说,他可以不通过账号密码,只通过layer preview中的图层名称直接下载shp数据。直接懵逼,仔细查了一下还真的是可以,还可以通过format_options 设置导出文件名,字符集之类的。那可不行,得想个法子把他禁用了。
在这里插入图片描述
其实一种简单的方式是对图层的权限做限制,不允许任何人能使用,这样子再layer preview列表里看不到,别人也不好猜下载的路径和地址。但是这样子之前的项目要改动。所以只能考虑先禁用掉shapefile的output_format。
查了半天没找到解决办法,无奈只能想着从jar包或者配置文件里找找看。
发现还真有一个jar包,里面配置了shapefile相关的bean
在这里插入图片描述
那直接上手,将jar包中的文件拷贝到桌面
在这里插入图片描述
注释掉以下代码在这里插入图片描述
再重新放回jar包中,重启geoserver服务,于是我们看到shapefile就消失了,这样子直接网页操作就避免了,但是万一有人知道访问路径呢,这样子会不会还是可以继续下载
在这里插入图片描述
为了避免拼接请求路径,我们手动拼接这个下载路径
http://{host}:{port}/geoserver/{workspace}/ows?service=WFS&version=1.0.0&request=GetFeature&typeName={workspace}:{layername}&maxFeatures={maxFeatures}&outputFormat=SHAPE-ZIP
我们可以看到以下输出,证明了该方法的确避免了shapefile的打包下载
在这里插入图片描述

临时救火的方法也就算通过了吧

为了安全起见,后续还是考虑利用回来geoserver的权限功能,找了半天,感觉最简单上手的,还是authkey的方案。
在geoserver官网,下载以下扩展
在这里插入图片描述
然后在geoserver服务里,配置一个拦截器
在这里插入图片描述
这里采用webservice的形式,这样子一来方便利用项目的token来控制数据,另一方面也容易管理用户。
在这里插入图片描述
此时我们简单的写一个验证接口,这边偷个懒,不管谁请求,都返回是admin用户,具体的逻辑,请自行填写。
在这里插入图片描述
然后配置filter
在这里插入图片描述
点击保存,我们现在来看下效果,访问请求数据,发现403,很完美,然后
在这里插入图片描述
然后代码中,统一都加一个authkey 请求,发现数据请求正常
在这里插入图片描述
在这里插入图片描述

**

注意:

**
在使用authkey的形式时,geoserver在验证成功后,10分钟内不会再去请求验证服务器,也就是这10分钟内你操作数据,都认为是验证成功的,即使这个时候后台更换了这个token,10分钟之后会再次请求验证服务器,若此时token失效,则无法访问资源,本人测试的时候是差不多10分钟会去验证一次,暂时没找到调整这个验证时间的地方,后续有时间再研究研究

至此,部分权限控制算是完成了

  相关解决方案