Java 使用「;IssuerAsigneDid“;作为对b2c目录的get()调用,检查用户是否存在。[爪哇]

Java 使用「;IssuerAsigneDid“;作为对b2c目录的get()调用,检查用户是否存在。[爪哇],java,microsoft-graph-api,azure-ad-b2c,Java,Microsoft Graph Api,Azure Ad B2c,我正在尝试实现get()调用,用于检查b2c目录中的现有用户,我正在使用 User user = graphClient.users("422a535b-a60d-4e5f-833e-2789b32ca04f").buildRequest().get(); 这将返回用户数据,但是我只能这样做,因为我有在创建用户时发布的用户id User buildUserRequest = graphClient.users()

我正在尝试实现get()调用,用于检查b2c目录中的现有用户,我正在使用

User user = graphClient.users("422a535b-a60d-4e5f-833e-2789b32ca04f").buildRequest().get();
这将返回用户数据,但是我只能这样做,因为我有在创建用户时发布的用户id

User buildUserRequest = graphClient.users()
                                .buildRequest()
                                .post(createNewUser);

        return buildUserRequest.id;
我正在尝试迁移一批JSON格式的用户,迁移工作正常,JSON如下所示:

{
  "users": [
    {
      "displayName": "Sharad Dutta",
      "givenName": "",
      "surname": "",
      "extension_user_type": "user",
      "identities": [
        {
          "signInType": "emailAddress",
          "issuerAssignedId": "00bonded007@gmail.com"
        }
      ],
      "extension_timezone": "VET",
      "extension_locale": "en-GB",
      "extension_tenant": "EG12345"
    },
    {
      "displayName": "Wayne Rooney",
      "givenName": "Wayne",
      "surname": "Rooney",
      "extension_user_type": "user",
      "identities": [
        {
          "signInType": "userName",
          "issuerAssignedId": "00bonded007"
        }
      ],
      "extension_timezone": "VET",
      "extension_locale": "en-GB",
      "extension_tenant": "EG12345"
    }
  ]
}
当我创建一个用户时,只要ISSUERASIGNEDID在active directory中不存在,它就可以正常工作。我想处理这样一种情况,即我正在使用get()请求检查issuerasignedid,如果目录中存在用户,请跳过它,这样代码就不会中断或由于异常而退出

我可以使用try/catch进行此操作,但我可以使用issuerasignedid代替用户id来检查b2c中是否存在用户,如果是,则跳过该用户。

使用此:

    LinkedList<QueryOption> requestOptions = new LinkedList<>();
    requestOptions.add(new QueryOption("$filter", "identities/any(c:c/issuerAssignedId eq '00bonded007@gmail.com' and c/issuer eq 'contoso.onmicrosoft.com')"));

    IUserCollectionPage Users = graphClient.users()
            .buildRequest(requestOptions)
            .get();
LinkedList requestOptions=新建LinkedList();
添加(新查询选项(“$filter”),“标识/any(c:c/issuerasignedid eq”00bonded007@gmail.com“和c/发行人eq“contoso.onmicrosoft.com”));
IUserCollectionPage Users=graphClient.Users()
.buildRequest(请求选项)
.get();
请注意,您应该将
contoso.onmicrosoft.com
修改为您的Azure B2C租户。

使用以下方法:

    LinkedList<QueryOption> requestOptions = new LinkedList<>();
    requestOptions.add(new QueryOption("$filter", "identities/any(c:c/issuerAssignedId eq '00bonded007@gmail.com' and c/issuer eq 'contoso.onmicrosoft.com')"));

    IUserCollectionPage Users = graphClient.users()
            .buildRequest(requestOptions)
            .get();
LinkedList requestOptions=新建LinkedList();
添加(新查询选项(“$filter”),“标识/any(c:c/issuerasignedid eq”00bonded007@gmail.com“和c/发行人eq“contoso.onmicrosoft.com”));
IUserCollectionPage Users=graphClient.Users()
.buildRequest(请求选项)
.get();

请注意,您应该将
contoso.onmicrosoft.com
修改为您的Azure B2C租户。

当我们发送带有属性的post()请求并返回

User buildUserRequest = null;
        try {
            buildUserRequest = graphClient.users()
                    .buildRequest()
                    .post(createNewUser);
                  
        } catch (GraphServiceException gse) {
            LOG.warn("Skipping! userPrincipalName already exists | signInType : " + signInType + " & issuerAssignedId " + issuerAssignedId);
            exitFlag = true;
            LOG.info("Setting exitFlag for existing user : " + exitFlag);
        }
        
        if (exitFlag == true) {
            return null;
        } else {
            return buildUserRequest.id;
        }

当我们发送带有属性的post()请求并返回时,这将处理任何唯一的条件,而不仅仅是issuerasignedid。

来回答

User buildUserRequest = null;
        try {
            buildUserRequest = graphClient.users()
                    .buildRequest()
                    .post(createNewUser);
                  
        } catch (GraphServiceException gse) {
            LOG.warn("Skipping! userPrincipalName already exists | signInType : " + signInType + " & issuerAssignedId " + issuerAssignedId);
            exitFlag = true;
            LOG.info("Setting exitFlag for existing user : " + exitFlag);
        }
        
        if (exitFlag == true) {
            return null;
        } else {
            return buildUserRequest.id;
        }

这将处理任何唯一的条件,而不仅仅是IssueRasSigneId。

当您尝试创建用户时,如果已存在
IssueRasSigneId
,它将显示一个错误“已存在另一个属性userPrincipalName具有相同值的对象”。为什么不使用try-catch捕获此错误并在循环中跳过它。我可以,但这是最好和有效的方法,还是有另一种方法,只是好奇,我最初想到使用try/catch。在Identifications属性上进行筛选时,必须同时提供issuer和ISSUERASIGNEDID。请在尝试创建用户时参考此方法,如果
issuerasignedid
已经存在,它将显示一个错误“另一个与属性userPrincipalName具有相同值的对象已经存在”。为什么不使用try/catch捕获此错误并在循环中跳过它。我可以,但这是最好和有效的方法,还是有另一种方法,只是好奇,我最初考虑使用try/catch。在对Identifications属性进行筛选时,您必须同时提供issuer和ISSUERASIGNEDID。请参阅我在返回用户id时使用的try/catch。很高兴知道这个问题已经解决了。但我的回答更适合回答你的问题。您的解决方案是一种变通方法。你能把我的回答标为接受吗?非常感谢。这会带来什么回报?如果不存在用户,IUserCollectionPage Users=NULL;如果存在用户,IUserCollectionPage Users=NULL是否会有一些值?我在返回用户id时使用了try/catch。很高兴知道这个问题已经解决了。但我的回答更适合回答你的问题。您的解决方案是一种变通方法。你能把我的回答标为接受吗?非常感谢。这会带来什么回报?如果不存在用户,IUserCollectionPage Users=NULL;如果存在用户,IUserCollectionPage Users=NULL是否有值?