- 浏览: 1151125 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 3622package com.esri.arcgis.sampl ... -
ArcGIS Server 集群的问题
2010-12-06 14:49 1815今天在服务器做了一个ArcGIS Server的集群部署加测试 ... -
Server For Flex API在线编辑移动图片符号
2010-11-18 21:57 2109当在点击事件中,用edit工具移动图片(Picture ... -
ArcGIS Server动态读取图层样式(Flex版)
2010-10-26 22:36 5250最近遇到很多人问这类的问题,在ArcGIS10的rest接口已 ... -
Web地图设计模式——ArcGIS Server
2010-06-07 12:54 3166Web地图通常包含底图(提供影像和位置信息)和功能性的专题图层 ... -
Arcgis Server+Asp.net(C#)的唯一值渲染
2010-05-27 23:55 3869#region "唯一值渲染" // ... -
Arcgis server的池化和非池化
2010-05-27 23:52 2022ServerObject的池化和非池 ... -
AO批量处理的经验之谈
2010-02-08 21:37 2428往Personal GDB或SDE GDB中写入要素记录是一件 ... -
任务管理器中arcsom.exe和arcsoc.exe的个数问题
2010-01-22 13:28 1797安装了ArcGIS Server的机器,当打开任务管理器的时候 ... -
ArcGIS空间查询算子
2010-01-20 19:19 25881. Intersect 定义:相交查询算子 ... -
ArcGIS Server的切图原理深入
2009-12-12 11:06 2708GoogleMap,VirtualEarth,YahooMap ... -
关于cache文件格式的选择:png8,png24,png32 or jpeg
2009-11-04 20:56 2544关于如何合理的选择缓存图片的格式: ... -
基于ArcGIS Server对ShapeFile文件的编辑功能实现
2009-05-13 16:46 4181public class PointEdit { ... -
ArcGIS server 常见问题
2009-05-11 13:13 27452更多问题详见:http://www ... -
Attachment support is disabled解决方案
2009-03-08 21:47 6458Unable to find required classes ... -
Ajax Integration and Support in the ArcGIS Java We
2009-03-08 21:34 2026http://edndoc.esri.com/arcobjec ... -
Server Java开发--Born for SOA系列 整理中。。。
2009-02-16 10:36 2118Server Java开发--Born for SOA系列 前 ... -
空间查询及属性文本查询的代码
2009-02-10 13:05 5041package com.esri.adf.web; ... -
ArcGIS Server 专题图的实现
2009-02-09 14:48 7215测试完毕.地图服务是用ArcGis自带的USA.mxd.还留有 ... -
Server Java讲座--动态添加图层数据
2009-02-05 11:46 2345有的时候,特别是在做分析时,需要经常添加新的图层到当前的地图中 ...
相关推荐
16、ArcGIS Server Java讲座---用自定义functionality实现用户权限控制 37 17、Server Java讲座-----扩展Tasks框架 42 18、ArcGIS Server Java讲座--自定义Tools开发 48 19、ArcGIS Server Java讲座-空间查询和高亮...
- 讲座讨论了如何通过自定义functionality实现用户权限控制,这是安全性和访问控制的关键部分。 7. **空间查询与网络分析**: - 文档还涉及了空间查询和高亮显示的实现,以及自定义Network Analysis,这些都是...
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...
JSP(JavaServer Pages)是创建动态 Web 内容的 Java 技术。文档提供了关于如何在 ArcGIS Server 应用中编写和集成 JSP 页面的指南。 10. **编写自定义任务 (9.Writing a Custom Task)** 自定义任务允许开发者...
在本系列讲座中,我们将探讨如何使用 JSF(JavaServer Faces)技术来开发 ArcGIS Server 应用程序。首先,我们需要解释为什么选择了 JSF 而不是其他框架。 **1.1 为什么选择 JSF:** - **成熟度与稳定性:**JSF 是...
- **JSF(JavaServer Faces)**:作为ADF的核心技术之一,JSF提供了丰富的UI组件库,简化了Web应用的开发过程。ADF选择了JSF作为其主要的用户界面框架,利用其MVC架构模式,实现了业务逻辑与用户界面的分离,提高了...
- **ADF选择JSF的原因**:ADF(Application Development Framework)之所以选择JSF(JavaServer Faces)作为其前端技术栈的一部分,主要是因为JSF提供了一套强大的用户界面组件库以及一套易于使用的模型视图控制器...
### 以太网/IP设备推荐功能 - PUB00070-Recommended-Functionality-for-EIP-Devices-v10 #### 1. 引言 本文档旨在为以太网/IP(EtherNet/IP)设备推荐与协议实现相关的功能。这些推荐来源于由以太网/IP实施者圆桌...
在"JavaPOS-源码.rar"这个压缩包中,包含的是JavaPOS的源代码,这对于学习和理解JavaPOS的工作原理以及如何使用JavaPOS API进行开发非常有帮助。下面将详细探讨JavaPOS的一些关键概念和技术: 1. **Device Services...
为了实现这一需求,可以通过实现自定义功能来控制哪些用户可以查看 "Pipeline_Network" 图层。 **三、实现自定义功能的具体步骤** - **创建自定义功能类**:首先,需要创建一个名为 `SecurityCheckFunctionality....
《ARCGIS SERVER9.2_JAVA开发》是一本专注于使用Java语言与ArcGIS Server 9.2结合进行地理信息系统开发的专业书籍。该书由许春杰撰写,旨在为开发者提供一套全面的技术指南,帮助他们更好地理解和掌握如何利用ArcGIS...
8. **自定义Functionality和用户权限控制**:介绍了如何通过自定义功能实现用户权限控制,确保应用的安全性。 9. **网络分析**:展示了如何在ArcGIS Server Java中进行网络分析,例如航线查询,这对于物流、交通...
efficient and standard-based server with free available source code.----------------------- Functionality Covered-----------------------1. GET- On submission of a Get request(downl
首先,教程中提到ADF选择了JSF(JavaServer Faces)作为其基础框架。JSF是一种用于构建Java Web应用程序的标准框架,提供了丰富的用户界面组件,使得开发者能够方便地构建和维护复杂用户界面。ADF采用JSF作为其基础...
### 软件RAID在戴尔服务器中的功能与实现 #### 1. 引言 随着技术的进步,数据存储的需求日益增长,RAID(独立磁盘冗余阵列)技术成为了提高数据可靠性和性能的重要手段之一。戴尔推出的新型PowerEdge T110、R210、...
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....
- 其他格式的数据需转换为ArcGIS兼容格式,可使用ArcToolbox的转换工具或第三方软件如MapInfo通用转换器,甚至编写自定义代码实现。 2. **建立地图文档**: - 加载图层时遵循一定规则,如点线面顺序,业务图层在...