geoserver是开源项目,基础情况并未对图层添加权限,只要知道图层链接即可访问,存在很大的数据安全问题,这里讲一下如何给图层添加权限,防止非用户访问相关数据。
一、针对系统用户:
这个权限主要是针对系统自身的用户,为不同的用户分配不同的权限,也就是为系统用户添加geoserver角色,1、可以手动在geoserver后台添加(直接在后台添加不怎么现实,不能系统中增加一个用户,我们就登录geoserver添加一个对应的用户);2、可以访问geoserver添加用户方法,后端在用户注册的时候直接把用户添加进geoserver中(这种方法也存在一个弊端,就是会造成geoserver用户庞大);3、在需要的时候添加(目前我们的项目中使用的就是这种),在用户需要访问geoserver图层的时候调用后端方法添加用户并绑定角色,访问结束后删除geoserver用户。具体实现这里就不多说了,需要后端到geoserver官网查找对应的接口。
二、针对图层:
这个权限是在访问图层的时候,会先去校验权限,不满足则无法访问
第一步:新增身份验证筛选器;
选择 AuthKey,Authentication key to user mapper:这个选项选择Web Service,这样就可以调用后端接口进行权限验证了,Web Service URL, with key placeholder:这个输入框里面是后端提供的接口,只填写:命名,以及上面两个,其他的默认即可,然后保存。
第二步:在过滤器链中,选择添加服务链;
添加过滤器链,Comma delimited list of ANT patterns (with optional query string) 这个输入框中是匹配图层访问链接的,例如:如果要限制访问geoserver/gwc/service/tms/1.0.0 ,这里需要填写/gwc/service/**,来对链接进行匹配。
添加完过滤条件,添加权限,basic是基于HTTP的认证,是基础认证要添加的,authkey是身份验证筛选器(上面添加的)
到这里geoserver控制台需要配置的都已经添加完成,剩下的就是前端的使用和后端如何验证了。
后端的验证就不说了,比较不是主攻后端的,说一下前端的使用。
这里直接上代码:
// wms
L.tileLayer.wms(`/geoserver/shp/wms`, {
format: "image/png",
VERSION: "1.1.1",
layers: 'layerName',
exceptions: "application/vnd.ogc.se_inimage",
transparent: true,
maxZoom: 21,
authkey:'后端返回的authkey'
});
// ows
return request({
url: `/geoserver/shp/ows?authkey='后端返回的authkey'`,
method: "GET",
params: {
format: "image/png",
VERSION: "1.1.1",
layers: 'layerName',
exceptions: "application/vnd.ogc.se_inimage",
transparent: true,
maxZoom: 21
},
});
两种方法,效果其实是一样的