Answers:
首先,我认为您应该阅读有关安全性的Geoserver文档。http://docs.geoserver.org/stable/zh-CN/user/security/index.html您将发现可以使不同的用户或角色可访问/不可访问图层。
另一个可能的解决方案是使外界无法访问geoserver(关闭服务器上8080端口,而不是localhost的IP),然后使用您选择的Web编程语言自己创建身份验证机制。
例如:您可以在php中设置某种登录/身份验证,将身份验证后的请求转发到本地主机上的geoserver。
您可以看看GeoPrisma
我们需要制作一个对敏感数据集具有安全性的Web映射应用程序。可以使用多个应用程序并通过对它们进行标准登录和密码访问来实现此目的,但是该项目太大,维护起来非常复杂。例如,添加新的数据集将需要手动修改每个应用程序,调整安全性等。
因此,我们决定开发自己的Web映射应用程序,其中包括使用可用的OpenSource Web映射应用程序对数据集进行访问控制。
http://geoprisma.org/dist/build/html/introduction/index.html
我将扫描文档-如果您的系统上只有几个层/用户,将其添加到一个简单的项目中可能会过大。如果您拥有数百个对不同数据集具有编辑权限的用户/组,那么使用诸如GeoPrisma之类的现有项目可能很有意义。
否则,基于HTTP构建的标准Web服务器安全性可能就足够了。
一种方法是实现这样的代理,该代理可以验证用户使用会话变量登录的凭据,并且仅允许他们访问他们有权使用的资源,即:检查要调用的层的url并拒绝访问用户无权查看它们。
就他们可能看到的数据而言,如果它是较大数据集的子集,这会稍微复杂一些,但是我看到了两种方法。
使用参数化SQL视图控制用户将看到哪些数据。您可以使用Proxy更改url,然后再使用该用户特定的参数将其传递给Geoserver。用户通过身份验证后,还可以通过Ajax调用将参数发送回Openlayers,并在OpenLayers中作为WMS getMAP调用的一部分提供参数。显示的实际数据可以通过SLD中的变量替换来过滤显示的数据,或者通过在WMS getMap调用中使用外部样式来更改用户用来显示给定图层的SLD来处理。
用户认证后使用Ajax调用来指定Map Extent,以仅允许用户在指定区域内移动。您也可以使用layerVisibility()来限制可以显示哪些数据。