Okta 在 java 中无限制地获取所有用户列表
Okta get all users list without limit in java
我用这个知道 Link header we can get the next users and we can get the users list by passing a maximum of 200 as a limit as defined here。
有没有办法通过使用 java 语言让所有用户在 Okta 中不受限制地出现?
Here 我找到了一种获取 Python 中所有用户的方法。 Java 的任何解决方案?
我试图将 python 逻辑转换为 Java。这是获取所有用户的工作代码:
public List<RemoteUsersDTO> getAllRemoteUsers() {
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
String OKTA_URL = "https:bmg.okta-emea.com/api/v1/users?limit=200";
headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
headers.setContentType(MediaType.APPLICATION_JSON);
headers.add("Authorization", "SSWS " + OKTA_API_KEY);
HttpEntity<String> request = new HttpEntity<>(headers);
String url = OKTA_URL;
List<RemoteUsersDTO> remoteUserList = new ArrayList<>();
while (url != null) {
ResponseEntity<RemoteUsersDTO[]> response = restTemplate.exchange(
url, HttpMethod.GET, request, RemoteUsersDTO[].class);
RemoteUsersDTO[] remoteUsers = response.getBody();
HttpHeaders responseHeaders = response.getHeaders();
List<String> links = responseHeaders.get("Link");
if (links != null) {
for (String link : links) {
if (link.contains("next")) {
String urlNext = StringUtils.substringBefore(link, ";");
urlNext = urlNext.substring(1, urlNext.length() - 1);
url = urlNext;
} else {
url = null;
}
}
} else {
url = null;
}
if (remoteUsers != null && remoteUsers.length > 0) {
remoteUserList.addAll(Arrays.asList(remoteUsers));
log.info("Total remote users from okta: " + remoteUserList.size());
} else {
url = null;
}
}
return remoteUserList;
}
需要对其进行优化,但它目前正在运行。
您可以使用 Okta 的 Java 管理 SDK 来列出所有用户,如下所示:
UserList users = client.listUsers();
// stream
client.listUsers().stream()
.forEach(user -> {
// do something
});
参考文献:
https://github.com/okta/okta-sdk-java#list-all-users
https://github.com/okta/okta-sdk-java#paging
我用这个知道 Link header we can get the next users and we can get the users list by passing a maximum of 200 as a limit as defined here。
有没有办法通过使用 java 语言让所有用户在 Okta 中不受限制地出现?
Here 我找到了一种获取 Python 中所有用户的方法。 Java 的任何解决方案?
我试图将 python 逻辑转换为 Java。这是获取所有用户的工作代码:
public List<RemoteUsersDTO> getAllRemoteUsers() {
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
String OKTA_URL = "https:bmg.okta-emea.com/api/v1/users?limit=200";
headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
headers.setContentType(MediaType.APPLICATION_JSON);
headers.add("Authorization", "SSWS " + OKTA_API_KEY);
HttpEntity<String> request = new HttpEntity<>(headers);
String url = OKTA_URL;
List<RemoteUsersDTO> remoteUserList = new ArrayList<>();
while (url != null) {
ResponseEntity<RemoteUsersDTO[]> response = restTemplate.exchange(
url, HttpMethod.GET, request, RemoteUsersDTO[].class);
RemoteUsersDTO[] remoteUsers = response.getBody();
HttpHeaders responseHeaders = response.getHeaders();
List<String> links = responseHeaders.get("Link");
if (links != null) {
for (String link : links) {
if (link.contains("next")) {
String urlNext = StringUtils.substringBefore(link, ";");
urlNext = urlNext.substring(1, urlNext.length() - 1);
url = urlNext;
} else {
url = null;
}
}
} else {
url = null;
}
if (remoteUsers != null && remoteUsers.length > 0) {
remoteUserList.addAll(Arrays.asList(remoteUsers));
log.info("Total remote users from okta: " + remoteUserList.size());
} else {
url = null;
}
}
return remoteUserList;
}
需要对其进行优化,但它目前正在运行。
您可以使用 Okta 的 Java 管理 SDK 来列出所有用户,如下所示:
UserList users = client.listUsers();
// stream
client.listUsers().stream()
.forEach(user -> {
// do something
});
参考文献: https://github.com/okta/okta-sdk-java#list-all-users https://github.com/okta/okta-sdk-java#paging