产生这篇文章的想法是在前端通过js调用restAPI时,总是不成功,发送ajax请求时还总是出现类似跨域的问题,后来查找才发现,默认情况下restAPI的访问都需要管理员权限,而通过ajax请求传输用户名和密码,geoserver服务器并没有相应的过滤器进行解析,后在geoserver的Authentication页面发现有rest的授权设置,想到之前为default(/**)设置的UUID筛选器,才找到解决办法,现总结如下:

geoserver的管理页面中没有rest访问权限设置,在GEOSERVER_DATA_DIR指定的data目录中,data/sercurity文件夹下有rest访问权限配置文件rest.properties文件,内容如下:

# Default REST security configuration.
#
# By default this configuration locks down every rest call. The following is an example of a more
# lax configuration in which read only (GET) access is allowed anonymously:
#
#/**;GET=IS_AUTHENTICATED_ANONYMOUSLY
#/**;POST,DELETE,PUT=ROLE_ADMINISTRATOR
#
# The following is an example of a configuration that could be used with the restconfig plugin in
# which only configuration in a specific workspace is restricted:
#
#/rest/workspaces/topp*;GET=ROLE_ADMINISTRATOR
#/rest/workspaces/topp/**;GET=ROLE_ADMINISTRATOR
#/**;POST,DELETE,PUT=ROLE_ADMINISTRATOR
#
#
/**;GET=ROLE_ADMINISTRATOR
/**;POST,DELETE,PUT=ROLE_ADMINISTRATOR

1、通过设置UUID+authkey认证实现授权认证;

默认所有的操作都需要管理员角色的权限,可将GET设置为匿名用户权限,/**;GET=IS_AUTHENTICATED_ANONYMOUSLY,这样不需要经过身份验证即可获取geoserver服务器上发布的资源信息,如http://IP:port/geoserver/rest/workspaces/topp/featuretypes.json,即可获取topp工作区内的所有矢量图层;若GET操作设置为ROLE_ADMINISTRATOR管理员权限,在浏览器中访问该url时会要求输入用户名和密码,也可以在geoserver管理页面的Authentication授权页面的Filter Chains中设置rest的筛选器,增加用户属性筛选,这样可直接在url中通过authkey认证身份,如http://IP:port/geoserver/rest/workspaces/topp/featuretypes.json?authkey=2004149d-e039-4a95-b474-xxxxxx,authkey为用户的UUID。

geoserver服务器启动时,会自动在data/sercurity文件夹下生成rest.properties文件,若想设置初始的rest.properties,可在gs-main工程下,org.geoserver.security.impl包中修改模板文件rest.properties.template,内容与前面一样。

这样前端通过ajax访问restAPI时,只需要在url中增加authkey参数就可以正常访问了。

2、通过HTTP basic authentication在http请求头中添加Authentication属性实现授权认证

geoserver服务器端默认情况下,对rest访问使用的授权过滤器就包括basic(Basic HTTP authentication)类型的过滤,会自动解析http请求头中的Authentication属性信息。

前端ajax请求代码如下:

    $.ajax({
headers: {
"Content-Type":"application/json; charset=utf-8",
"Accept": "application/json",
"Authorization": "Basic " + btoa("user:password")
},
url: "http://remoteUrl/geoserver/rest/layers.json",
cache: false,
dataType: 'json',
error: function(jqXHR) {
console.log("ajax error " + jqXHR.status);
}
}).done(function(data) {
console.log(data);
});

若前端仍然返回类似跨域访问的问题:

Failed to load http://remoteUrl/geoserver/rest/layers.json?_=1521788544568: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access. The response had HTTP status code 403.

可查看geoserver服务器的跨域配置,在web.xml配置文件中,确保Authorization在跨域访问支持的请求头属性中,如下:

   <!--Cross Origin Filter -->
<filter>
<filter-name>CORS</filter-name>
<filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
<init-param>
<param-name>cors.allowOrigin</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>cors.supportedMethods</param-name>
<param-value>GET, POST, HEAD, PUT, DELETE</param-value>
</init-param>
<init-param>
<param-name>cors.supportedHeaders</param-name>
<param-value>Accept, Origin, X-Requested-With, Content-Type, Last-Modified, Authorization</param-value>
</init-param>
<init-param>
<param-name>cors.exposedHeaders</param-name>
<param-value>Set-Cookie</param-value>
</init-param>
<init-param>
<param-name>cors.supportsCredentials</param-name>
<param-value>true</param-value>
</init-param>
</filter>

3、rest的用户属性授权设置

在Authentication页面,点击添加新的授权过滤器,设置用户属性过滤器如下:

点击同步用户组服务,就会为所有用户创建UUID,在用户/组页面中查看用户信息,效果如下:

在Filter Chains下面设置rest参数,将uuidAuthkey过滤器加入,注意最后一个过滤器必须是anonymous匿名过滤器,然后关闭,回到Authentication页面,一定要点击该页面底部的保存按钮,这些操作才会生效。

geoserver源码学习与扩展——restAPI访问的更多相关文章

  1. geoserver源码学习与扩展——跨域访问配置

    在 geoserver源码学习与扩展——restAPI访问 博客中提到了geoserver的跨域参数设置,本文详细讲一下geoserver的跨域访问配置. geoserver的跨域访问依赖java-p ...

  2. geoserver源码学习与扩展——自动发布shapefile图层

    geoserver通过工作空间Workspace-数据源DataStore-图层Layer管理地理数据,这些信息都通过Catalog进行组织和管理,要完成自动发布只需要在Catalog中增加相应的信息 ...

  3. geoserver源码学习与扩展——kml/kmz转shapefile文件

    geoserver通过工作空间Workspace-数据源DataStore-图层Layer管理地理数据,默认只支持shapefile格式的文件发布,不支持kml/kmz.csv的文件格式,所以存在将这 ...

  4. geoserver源码学习与扩展——增加服务接口

    参看:http://www.cnblogs.com/sillyemperor/archive/2011/01/11/1929420.html 上文写的很详细了.

  5. geoserver源码学习与扩展——CSV转shapefile文件

    基于geotools实现csv转换为shapefile文件. 1.读取CSV文件,将其装入FeatureCollection: 2.利用ShapefileDumper类将FeatureCollecti ...

  6. MVC系列——MVC源码学习:打造自己的MVC框架(四:了解神奇的视图引擎)

    前言:通过之前的三篇介绍,我们基本上完成了从请求发出到路由匹配.再到控制器的激活,再到Action的执行这些个过程.今天还是趁热打铁,将我们的View也来完善下,也让整个系列相对完整,博主不希望烂尾. ...

  7. MVC系列——MVC源码学习:打造自己的MVC框架(三:自定义路由规则)

    前言:上篇介绍了下自己的MVC框架前两个版本,经过两天的整理,版本三基本已经完成,今天还是发出来供大家参考和学习.虽然微软的Routing功能已经非常强大,完全没有必要再“重复造轮子”了,但博主还是觉 ...

  8. MVC系列——MVC源码学习:打造自己的MVC框架(一:核心原理)

    前言:最近一段时间在学习MVC源码,说实话,研读源码真是一个痛苦的过程,好多晦涩的语法搞得人晕晕乎乎.这两天算是理解了一小部分,这里先记录下来,也给需要的园友一个参考,奈何博主技术有限,如有理解不妥之 ...

  9. 【 js 基础 】【 源码学习 】源码设计 (持续更新)

    学习源码,除了学习对一些方法的更加聪明的代码实现,同时也要学习源码的设计,把握整体的架构.(推荐对源码有一定熟悉了之后,再看这篇文章) 目录结构:第一部分:zepto 设计分析第二部分:undersc ...

随机推荐

  1. Linux IPC之管道通信

    2017-04-07 管道通信在linux中使用较为频繁的进程通信机制.基于unix一切皆文件的传统,管道也是一种文件.所以可以使用一般的VFS接口对管道进行读写操作,如read.write.具体管道 ...

  2. MySQL优化(三):优化数据库对象

    二.优化数据库对象 1.优化表的数据类型 应用设计的时候需要考虑字段的长度留有一定的冗余,但不推荐很多字段都留有大量的冗余,这样既浪费磁盘空间,也在应用操作时浪费物理内存. 在MySQL中,可以使用函 ...

  3. Windows上安装Node.js

    Windows安装包(.msi) Node.js安装地址:https://nodejs.org/en/download/ 本文以node-v8.9.1-x64.msi为例, 步骤1:双击下载后的安装包 ...

  4. java_基础——用代码编译.java文件+加载class文件

    [本文介绍] 本文不是深入理解和使用java编译器,只是在代码里编译.java文件的helloWorld.这种技术还是蛮有意思的,说不定在将来的某些只能化项目会运用到!^_^ [简单编译的流程] [j ...

  5. npm命令,查看当前npm版本,更新nmp到最新版本,安装sails

    打开Node.js command prompt 1 查看npm当前版本 npm -v 2 更新npm至最新版本 npm install npm@latest -g 3 安装sails  npm in ...

  6. 马尔可夫随机场(Markov random fields) 概率无向图模型 马尔科夫网(Markov network)

    上面两篇博客,解释了概率有向图(贝叶斯网),和用其解释条件独立.本篇将研究马尔可夫随机场(Markov random fields),也叫无向图模型,或称为马尔科夫网(Markov network) ...

  7. windows安装redis, php5.5

    全套安装包地址 http://download.csdn.net/detail/whellote/9572797   解压 redis-2.2.5-win32-win64, 将里面的内容拷贝到j:/r ...

  8. 函数对象[条款18]---《C++必知必会》

    有时需要一些行为类似于函数指针的东西,但函数指针显得笨拙.危险而且过时(让我们承认这一点).通常最佳方式是使用函数对象(function object)取代函数指针. 与智能指针一样,函数对象也是一个 ...

  9. Paper List ABOUT Deep Learning

    Deep Learning 方向的部分 Paper ,自用.一 RNN 1 Recurrent neural network based language model RNN用在语言模型上的开山之作 ...

  10. 联想笔记本电脑的F1至F12键盘问题。怎么设置才能不按FN就使用F1

    在BIOS中有相应调整开关,开机时进入BIOS----CONFIG----Keyboard/Mouse----Change to "f1-f12 keys"选项设置为Legacy ...