参考文章: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分钟会去验证一次,暂时没找到调整这个验证时间的地方,后续有时间再研究研究
至此,部分权限控制算是完成了