Howto: 使用服务器对象扩展获取当前用户名和角色
文章编号 : 39285
软件: ArcGIS Server 10
操作系统: N/A
软件: ArcGIS Server 10
操作系统: N/A
发起人
相关问题
- 如何优雅的使用ArcGIS知乎?
- 作为Desktop用户对数据的获取比较乏力,可能缺了哪些知识?
- 有谁知道哪里可以免费获取各省市地图数据呢,包括详细的shape文件数据
- 苹果系统下可以使用arcgis 吗?
- 在Visual studio 2015 中使用 Arcgis API for JavaScript v3.16 如何实现代码智能提示?
- 请问arcmap如何使用多线程?
- 安装arcgis server 需要不需要安装网络服务器(如IIS和Apache)和.Net Frameworkma?
- arcgis runtime for andriod 100.1 如何使用eclipse开发
- 如何使用脚本或其他方法,将图层属性中属性域原值内容替换为属性域描述?
- 访问arcgisserver发布的服务,提示要输入用户名密码,验证登录
- Arcgis10.4 创建企业级地理数据库 “用户不具有创建数据库对象的必要权限 ”
问题状态
- 最新活动: 2015-11-26 18:19
- 浏览: 1516
- 关注: 1 人
1 个回复
易智瑞技术支持
赞同来自:
内容: 步骤1 显示了用于.NET SOE的代码片段,步骤2是用Java写的。根据选择的语言,采用适当的解决方案。
1、 代码片段(C#)
首先,获得IServerEnvironment接口的指针。IServerUserInfo接口有UserInfo属性。从那个属性,可以获得用户名和角色。
<a>具体步骤>></a>
private IServerEnvironment GetServerEnvironment()
{
IEnvironmentManager em = new EnvironmentManagerClass();
if (em != null)
{
UID iseUid = new UIDClass();
iseUid.Value = "{32d4c328-e473-4615-922c-63c108f55e60}:0";
try
{
object o = em.GetEnvironment(iseUid);
return o as IServerEnvironment;
}
catch { }
return null;
}
return null;
}
使用IServerEnvironment获取用户信息。下面是叫做AdminInfo的REST资源处理方法。在.NET ArcObjects SDK中,这个方法可以象SOE 样例中的其它方法一样使用。
<a>具体步骤>></a>
private byte[] AdminInfo(NameValueCollection boundVariables, string outputFormat, string requestProperties, out string responseProperties)
{
responseProperties = null;
IServerEnvironment3 senv = GetServerEnvironment() as IServerEnvironment3;
JsonObject result = new JsonObject();
JsonObject suinfoj = new JsonObject();
//get user info and serialize into JSON
IServerUserInfo suinfo = senv.UserInfo;
if (null != suinfo)
{
suinfoj.AddString("currentUser", suinfo.Name);
IEnumBSTR roles = suinfo.Roles;
List<string> rolelist = new List<string>();
if (null != roles)
{
string role = roles.Next();
while (!string.IsNullOrEmpty(role))
{
rolelist.Add(role);
role = roles.Next();
}
}
suinfoj.AddArray("roles", rolelist.ToArray());
result.AddJsonObject("serverUserInfo", suinfoj);
}
else
{
result.AddJsonObject("serverUserInfo", null);
}
return Encoding.UTF8.GetBytes(result.ToJson());
}
这个代码会返回如下JSON:
{
"serverUserInfo": {
"currentUser": "demo",
"roles": [
"admin",
"publisher"
]
}
}
2、 代码片段(Java)
如果REST SOE有子资源叫做UserCredentials, 在Java 中可以有如下的实现:
<a>具体步骤>></a>
private byte[] getSubresourceUserCredentials() throws Exception {
EnvironmentManager envMgr = new EnvironmentManager();
UID envUID = new UID();
envUID.setValue("{32d4c328-e473-4615-922c-63c108f55e60}");
Object envObj = envMgr.getEnvironment(envUID);
JSONObject userInfoJSON = new JSONObject();
try {
IServerEnvironment2 env = new IServerEnvironment2Proxy(envObj);
//get user info and serialize into JSON
IServerUserInfo userInfo = env.getUserInfo();
if(userInfo == null)
{
userInfoJSON.put("error", "UserInfo is null. No user/roles configured.");
}
else
{
userInfoJSON.put("userName", userInfo.getName());
IEnumBSTR strEnum = userInfo.getRoles();
String roleName = strEnum.next();
StringBuffer rolesBuffer = new StringBuffer();
while(!roleName.isEmpty())
{
rolesBuffer.append(roleName + ";");
roleName = strEnum.next();
}
userInfoJSON.put("roles", rolesBuffer.toString());
}
} catch (Exception e) {
this.serverLog.addMessage(3, 200, "Exception: " + e.getMessage());
}
return userInfoJSON.toString().getBytes("utf-8");
}
创建时间:2011-09-20
最近更新: 2011-09-30
【原文链接】
http://support.esrichina.com.c ... .html
要回复问题请先登录或注册