Java 使用「;IssuerAsigneDid“;作为对b2c目录的get()调用,检查用户是否存在。[爪哇]
我正在尝试实现get()调用,用于检查b2c目录中的现有用户,我正在使用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()
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是否有值?