- 浏览: 1135955 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
RebeccaZhong:
严重: StandardWrapper.Throwableco ...
三步发布java方式的rest服务 -
RebeccaZhong:
严重: StandardWrapper.Throwableco ...
三步发布java方式的rest服务 -
冷酷月光:
楼主。请教一下。arcgis for android 有提供地 ...
ArcGIS API For Android离线地图的实现 -
winney117:
请问如何GET已有网页上的指定内容?比如百度文库中的某一篇文章 ...
三步发布java方式的rest服务 -
zige1012:
您好,我想问问我想换个自己地图的切片,也有4层(L0-L3), ...
ArcGIS API For Android离线地图的实现
有了上此讲座的基础,我想理解我们这个功能应该就很容易了。刚刚我们经理问我有用户希望控制web登陆用户的权限,那么我们正好利用这个讲座来看看如何实现这个功能。我们新建一个类,functionality当然要实现GISFunctionality接口了:
我们在这里放了一个AGSMapResource类型的变量,因为我们需要对Resource进行很多操作,我们来看一下:
上面的代码中用removeLayer(pipelineLayerInfo,layerInfos);函数移除了要移除的层,然后更新了TOC和MAP,我们来看看这个函数怎么来写:
我们注意到这是一个递归函数,用于把该层下面所有的其它附属层都删除:
这个functionality写完了,我们来看看如何部署,部署的时候,先把它作为一个Managed Bean部署,用下面可代码即可,可以在faces-config.xml文件里面,也可以在ags-functionality.xml里面:
将它作为一个managedBean部署后,下面就把它部署到resource中,注意部署的时候,要将其部署到map之后,toc之前,因为ADF初始化是按顺序初始化,我们的权限控制需要从Map中读出层的信息,然后修改MapDesc,从而影响TOC的信息,所以,进行如下的部署配置:
OK,这个安全控制的functionality已经完成了。但是我们要对整个WebApplication加上安全控制,需要在web.xml做修改,添加如下的配置:
这两个组在什么地方定义呢?如果是Tomcat,我们可以在$TOMCAT_HOME/conf/tomcat-users.xml中定义,定义如下:
这样我们就控制了整个Web Application,并且对于不同的用户组,赋予了不同的层的查看权限。每次用户访问这个网站的时候,都会被提示要求输入用户名和密码,按照我们在Tomcat-users里面的定义进行输入即可。
还有用户会问道,如果我希望对属性字段的编辑进行控制怎么办;事实上原理是类似的,你让用户修改属性字段时,肯定要传输一个字段列表,你可以根据不同的用户组,对这个字段列表进行控制。
另外,这里我们用了WEB容器的用户和权限进行控制,事实上你不必依赖于Web容器,你可以在数据库中存放你自己定义的用户名和组,进行控制。
权限控制简单的讲就是这样子,.net里面也类似,有机会的话,我会写一个.net版本的给大家看看。
注:本讲座内容参考了并翻译了ESRI的JAVA帮助的部分内容。
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-comfficeffice" /> public class SecurityCheckFunctionality implements GISFunctionality { private AGSMapResource resource; public void initFunctionality(GISResource resource) { //empty } public void destroyFunctionality() { //empty } public GISResource getResource() { //empty } }
我们在这里放了一个AGSMapResource类型的变量,因为我们需要对Resource进行很多操作,我们来看一下:
public void initFunctionality(GISResource resource) { this.resource = (AGSMapResource)resource; //得到资源 //查看用户是否属于"petroEmployee" 角色 if(!WebUtil.getExternalContext().isUserInRole("pretroEmployee")){ //从Resource中得到MapFunctionality AGSMapFunctionality mapFunc = (AGSMapFunctionality)resource.getFunctionality("map"); //得到对 MapServerInfo的引用 MapServerInfo serverInfo = mapFunc.getMapServerInfo(); //得到 "Pipeline_Network" 层 MapLayerInfo pipelineLayerInfo = AGSUtil.getLayerInfo("PipeLine_Network",layerInfos); if(pipelineLayerInfo==null) return; //层不存在,return. //从TOC中移除 MapLayerInfo[] newLayerInfos = removeLayer(pipelineLayerInfo,layerInfos); serverInfo.setMapLayerInfos(newLayerInfos); //从MAP中移除 LayerDescription[] layerDescriptions =serverInfo.getDefaultMapDescription().getLayerDescriptions(); //新建一个层描述,替换原来的层描述 LayerDescription[] newLayerDescriptions = new LayerDescription[newLayerInfos.length]; for(int i=0;i<newLayerInfos.length;i++){ newLayerDescriptions=AGSUtil.getLayerDescription(newLayerInfos.getLayerID(),layerDescriptions); 5 serverInfo.getDefaultMapDescription().setLayerDescriptions(newLayerDescriptions); } }
上面的代码中用removeLayer(pipelineLayerInfo,layerInfos);函数移除了要移除的层,然后更新了TOC和MAP,我们来看看这个函数怎么来写:
//Logic to remove a layer and all its descendants private MapLayerInfo[] removeLayer(MapLayerInfo unwantedLayerInfo, MapLayerInfo[] oldLayerInfos) { //新建一个MapLayerInfo MapLayerInfo[] newLayerInfos = new MapLayerInfo[oldLayerInfos.length-1]; ArrayList descendantLayers = new ArrayList(); for(int i=0,j=0;i<oldLayerInfos.length;i++){ if(oldLayerInfos.getLayerID()!=unwantedLayerInfo.getLayerID()) newLayerInfos[j++] = oldLayerInfos; if(oldLayerInfos.getParentLayerID()==unwantedLayerInfo.getLayerID()) descendantLayers.add(oldLayerInfos); } for(int i=0;i<descendantLayers.size();i++){ newLayerInfos = removeLayer((MapLayerInfo)descendantLayers.get(i),newLayerInfos); } return newLayerInfos; }
我们注意到这是一个递归函数,用于把该层下面所有的其它附属层都删除:
这个functionality写完了,我们来看看如何部署,部署的时候,先把它作为一个Managed Bean部署,用下面可代码即可,可以在faces-config.xml文件里面,也可以在ags-functionality.xml里面:
<managed-bean> <managed-bean-name>securitycheck</managed-bean-name> <managed-bean-class>com.mypackage.SecurityCheckFunctionality</managed-bean-class> <managed-bean-scope>none</managed-bean-scope> </managed-bean>
将它作为一个managedBean部署后,下面就把它部署到resource中,注意部署的时候,要将其部署到map之后,toc之前,因为ADF初始化是按顺序初始化,我们的权限控制需要从Map中读出层的信息,然后修改MapDesc,从而影响TOC的信息,所以,进行如下的部署配置:
<managed-bean> <managed-bean-name>ags1</managed-bean-name> <managed-bean-class> com.esri.adf.web.ags.data.AGSLocalMapResource </managed-bean-class> <managed-bean-scope>none</managed-bean-scope> ... <managed-property> <property-name>functionalities</property-name> <map-entries> <map-entry> <key>map</key> <value>#{agsMap}</value> </map-entry> <map-entry> <key>query</key> <value>#{agsQuery}</value> </map-entry> <map-entry> <key>tile</key> <value>#{agsTile}</value> </map-entry> <map-entry> <key>overview</key> <value>#{agsOverview}</value> </map-entry> <map-entry> <key>pipeline_security_check</key> <value>#{securitycheck}</value> </map-entry> <map-entry> <key>toc</key> <value>#{agsToc}</value> </map-entry> </map-entries> </managed-property> </managed-bean>
OK,这个安全控制的functionality已经完成了。但是我们要对整个WebApplication加上安全控制,需要在web.xml做修改,添加如下的配置:
<login-config> <auth-method>DIGEST</auth-method> <realm-name>My_WebApplication</realm-name> </login-config> //声明两个组用户 <security-role> <role-name>petroEmployee</role-name> </security-role> <security-role> <role-name>stateEmployee</role-name> </security-role> //声明什么资源将收到安全控制,这里我们把整个目录都控制,当然你也可以控制胆敢目录 <security-constraint> <web-resource-collection> <url-pattern>*<url-pattern> </web-resource-collection> <auth-constraint> <role-name>petroEmployee</role-name> <role-name>stateEmployee<role-name> </auth-constraint> </security-constraint>
这两个组在什么地方定义呢?如果是Tomcat,我们可以在$TOMCAT_HOME/conf/tomcat-users.xml中定义,定义如下:
<tomcat-users> ... <user name="joe" password="joe" roles="petroEmployee"> <user name="daisy" password="daisy" roles="stateEmployee"> ... </tomcat-users>
这样我们就控制了整个Web Application,并且对于不同的用户组,赋予了不同的层的查看权限。每次用户访问这个网站的时候,都会被提示要求输入用户名和密码,按照我们在Tomcat-users里面的定义进行输入即可。
还有用户会问道,如果我希望对属性字段的编辑进行控制怎么办;事实上原理是类似的,你让用户修改属性字段时,肯定要传输一个字段列表,你可以根据不同的用户组,对这个字段列表进行控制。
另外,这里我们用了WEB容器的用户和权限进行控制,事实上你不必依赖于Web容器,你可以在数据库中存放你自己定义的用户名和组,进行控制。
权限控制简单的讲就是这样子,.net里面也类似,有机会的话,我会写一个.net版本的给大家看看。
注:本讲座内容参考了并翻译了ESRI的JAVA帮助的部分内容。
发表评论
-
ArcGIS Server 导出地图图片(SOAP)
2011-03-22 17:40 3518package com.esri.arcgis.sampl ... -
ArcGIS Server 集群的问题
2010-12-06 14:49 1743今天在服务器做了一个ArcGIS Server的集群部署加测试 ... -
Server For Flex API在线编辑移动图片符号
2010-11-18 21:57 2017当在点击事件中,用edit工具移动图片(Picture ... -
ArcGIS Server动态读取图层样式(Flex版)
2010-10-26 22:36 5192最近遇到很多人问这类的问题,在ArcGIS10的rest接口已 ... -
Web地图设计模式——ArcGIS Server
2010-06-07 12:54 3113Web地图通常包含底图(提供影像和位置信息)和功能性的专题图层 ... -
Arcgis Server+Asp.net(C#)的唯一值渲染
2010-05-27 23:55 3786#region "唯一值渲染" // ... -
Arcgis server的池化和非池化
2010-05-27 23:52 1975ServerObject的池化和非池 ... -
AO批量处理的经验之谈
2010-02-08 21:37 2375往Personal GDB或SDE GDB中写入要素记录是一件 ... -
任务管理器中arcsom.exe和arcsoc.exe的个数问题
2010-01-22 13:28 1748安装了ArcGIS Server的机器,当打开任务管理器的时候 ... -
ArcGIS空间查询算子
2010-01-20 19:19 25411. Intersect 定义:相交查询算子 ... -
ArcGIS Server的切图原理深入
2009-12-12 11:06 2670GoogleMap,VirtualEarth,YahooMap ... -
关于cache文件格式的选择:png8,png24,png32 or jpeg
2009-11-04 20:56 2490关于如何合理的选择缓存图片的格式: ... -
基于ArcGIS Server对ShapeFile文件的编辑功能实现
2009-05-13 16:46 4073public class PointEdit { ... -
ArcGIS server 常见问题
2009-05-11 13:13 27318更多问题详见:http://www ... -
Attachment support is disabled解决方案
2009-03-08 21:47 6408Unable to find required classes ... -
Ajax Integration and Support in the ArcGIS Java We
2009-03-08 21:34 1987http://edndoc.esri.com/arcobjec ... -
Server Java开发--Born for SOA系列 整理中。。。
2009-02-16 10:36 2072Server Java开发--Born for SOA系列 前 ... -
空间查询及属性文本查询的代码
2009-02-10 13:05 4989package com.esri.adf.web; ... -
ArcGIS Server 专题图的实现
2009-02-09 14:48 7146测试完毕.地图服务是用ArcGis自带的USA.mxd.还留有 ... -
Server Java讲座--动态添加图层数据
2009-02-05 11:46 2302有的时候,特别是在做分析时,需要经常添加新的图层到当前的地图中 ...
相关推荐
16、ArcGIS Server Java讲座---用自定义functionality实现用户权限控制 37 17、Server Java讲座-----扩展Tasks框架 42 18、ArcGIS Server Java讲座--自定义Tools开发 48 19、ArcGIS Server Java讲座-空间查询和高亮...
arcgis server java 开发,自定义command,使用图片和TrueType字体进行标注,自定义Functionality,控制图层.....
Another option available for Scala users is sbt-javacv. Required Software To use JavaCV, you will first need to download and install the following software: An implementation of Java SE 7 or newer...
efficient and standard-based server with free available source code.----------------------- Functionality Covered-----------------------1. GET- On submission of a Get request(downl
How to create an Android app, as the core libraries in the Android operating system provide Java functionality. Table of Contents Chapter 1. Getting started Chapter 2. Performing operations Chapter 3....
PUB00070_Recommended-Functionality-for-EIP-Devices-v10.pdf
This book shows how using Java can significantly improve MATLAB program appearance and functionality, and that this can be done easily and even without any prior Java knowledge. Readers are led step-...
Ajax-PHP-CRUD-Functionality.zip,使用php、mysql、bootstrap、jquery和ajax完成crud(创建、检索、更新、删除)功能,ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和javascript。...
Agenda Discuss Hyper V deployment strategies Discuss System Center Virtual ...Understand what is needed to deploy PRO functionality Demo: System Center Virtual Manager Understand Hyper V performance
dell software raid工作原理白皮书。
This book shows how using Java can significantly improve MATLAB program appearance and functionality, and that this can be done easily and even without any prior Java knowledge. Readers are led step-...
http://undocumentedmatlab.com/books/matlab-java This book shows how using Java can significantly improve Matlab program appearance and functionality. This can be done easily and even without any ...
用于操作Excel API Java Excel API - A Java API... Because it is Java, this API may be invoked from within a servlet, thus giving access to Excel functionality over internet and intranet web applications.
http://undocumentedmatlab.com/books/matlab-java This book shows how using Java can significantly improve Matlab program appearance and functionality. This can be done easily and even without any ...
Software support for making effective pen-based applications is currently ...paper, we describe the functionality and architecture of SATIN, using two applications built with SATIN as examples.
康博嘉java笔试题 GOOGLE DORKS :dizzy: ------------------------------------------------------------------------------------------ Explanations: cache: If you include other words in the query, Google ...
需要锁定用户交互操作时使用同步方式。 jQuery 代码: var html = $.ajax({ url: "some.php", async: false }).responseText; ---------------------------------------------------------------------------...
Qt源码编译./configure -prefix $PWD/qtbase -opensource 报错 ERROR: The OpenGL functionality tests failed ubuntu 14.04 LTS qt-everywhere-opensource-src-5.9.9
Ericsson-LTE L12 Radio Network Functionality
2019版,矢量,高清,可复制,可检索,PDF,Road vehicles — Safety of the intended functionality,正式发布版本