Java VMM如何查找或获取VMM实体属性映射/属性名称

Java VMM如何查找或获取VMM实体属性映射/属性名称,java,websphere,Java,Websphere,起点: 我有一个具有联邦安全性的WebSphere(它后面有一个Active Directory)。 我正在尝试通过VMM用户的电子邮件地址获取其uid,但我不知道它的VMM(架构)属性如何映射到基础Active Directory实体(person、organizationalPerson对象类、mail属性)的AD(架构)属性 (以不同的方式进行描述:如果查看WAS控制台,在“用户和组”->“管理用户”中有一个表,其中有一个电子邮件列,因此它以某种方式映射。 但是,通过单击(“全局安全”->

起点: 我有一个具有联邦安全性的WebSphere(它后面有一个Active Directory)。 我正在尝试通过VMM用户的电子邮件地址获取其uid,但我不知道它的VMM(架构)属性如何映射到基础Active Directory实体(person、organizationalPerson对象类、mail属性)的AD(架构)属性

(以不同的方式进行描述:如果查看WAS控制台,在“用户和组”->“管理用户”中有一个表,其中有一个电子邮件列,因此它以某种方式映射。 但是,通过单击(“全局安全”->(联合存储库)配置按钮”->(有一个表,您可以选择))LDAP1行,并在“联合存储库属性名称到LDAP属性映射”中检查该表,我没有发现“电子邮件”列是如何映射到AD属性的。可能存在隐式映射?)

因此,首先的问题是:

如何在WAS控制台上找到它?或者,可能通过wsadmin(脚本)?

因此,正因为如此,我尝试向前推进,现在我将尝试使用VMM API查找它,但在官方文档中找不到第二个问题的答案:

是否可以以某种方式获取WebSphere VMM实体(虚拟成员管理器)的已分配/可用属性?

有很多关于的例子,但没有关于这个

是的,我知道这是一个有点XY的问题,但请引导我一点。 非常感谢

为了提供一些代码示例,我尝试使用以下代码获取用户的uid:

    public String testFetch(String email) throws Exception
    {
     
        String returnAttr = "uid";
        // here in the search expression what should I wrire instead of the 'mail'?
        String vmmSearchExpr = String.format("@xsi:type='PersonAccount' and mail='%s'", email);
        DataObject root = SDOHelper.createRootDataObject();
        DataObject searchCtrl = SDOHelper.createControlDataObject(root, null, SchemaConstants.DO_SEARCH_CONTROL);
        searchCtrl.setString(SchemaConstants.PROP_SEARCH_EXPRESSION, vmmSearchExpr);
        @SuppressWarnings("unchecked")
        List<String> props = searchCtrl.getList(SchemaConstants.PROP_PROPERTIES);
        props.add(returnAttr);
        Service service = new LocalServiceProvider(null);
        DataObject searchRoot = service.search(root);
        String result = "";
        List<?> entities = searchRoot.getList(SchemaConstants.DO_ENTITIES);
        if (entities.size() > 1) throw new RuntimeException("multiple users for an identity:" + vmmSearchExpr);
        if (entities.size() > 0)
        {
            DataObject objdo = (DataObject) entities.get(0);
            result = objdo.getString(returnAttr);
        }else{
            log("Got empty list There is no result.");
        }
        return result;
    }
publicstringtestfetch(字符串电子邮件)引发异常
{
字符串returnAttr=“uid”;
//在搜索表达式中,我应该写什么来代替“邮件”?
字符串vmmsearchxpr=String.format(@xsi:type='PersonAccount'和mail='s',email);
DataObject root=SDOHelper.createRootDataObject();
DataObject searchCtrl=SDOHelper.createControlDataObject(root,null,SchemaConstants.DO\u SEARCH\u CONTROL);
searchCtrl.setString(SchemaConstants.PROP_SEARCH_表达式,vmmsearchxpr);
@抑制警告(“未选中”)
List props=searchCtrl.getList(SchemaConstants.PROP_属性);
道具添加(返回属性);
服务服务=新的LocalServiceProvider(空);
dataobjectsearchroot=service.search(root);
字符串结果=”;
List entities=searchRoot.getList(SchemaConstants.DO_entities);
if(entities.size()>1)抛出新的RuntimeException(“标识的多个用户:”+vmmSearchExpr);
如果(entities.size()>0)
{
dataobjectobjdo=(DataObject)entities.get(0);
结果=objdo.getString(returnAttr);
}否则{
日志(“获取空列表,没有结果”);
}
返回结果;
}

一个可能的解决方案是添加一个新的联邦存储库支持的属性(名称:mail,属性名称:mail,实体类型:PersonAccount):

重新启动后,我可以使用搜索表达式

@xsi:type='PersonAccount' and mail='<email address>'
@xsi:type='PersonAccount'和mail=''
和上面的代码来获取给定电子邮件地址对应的uid。 c:\IBM\WebSphere\AppServer\etc\wim\setup\wimdbproperties.xml中似乎有一些信息,好像“IBM primaryEmail”将是包含电子邮件地址的属性,尽管我在指定此属性而不是“mail”属性名时无法找到uid