Howto: 使用服务器对象扩展获取当前用户名和角色

文章编号 : 39285
软件: ArcGIS Server 10
操作系统: N/A
已邀请:

易智瑞技术支持

赞同来自:

摘要: 这篇文章提供了针对.NET和Java的 REST服务器对象扩展(SOEs)的代码样例,用于显示如何获取用户名和角色以便SOE用户可以访问启用安全的ArcGIS Server 资源。

内容: 步骤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

要回复问题请先登录注册