harbor 认证关键代码
public class AuthUtils {
public static HttpHeaders createHeaders(String username, String password) {
return new HttpHeaders() {
{
String auth = username + ":" + password;
String authHeader = "Basic " + Base64.getEncoder().encodeToString(auth.getBytes(StandardCharsets.US_ASCII));
set("Authorization", authHeader);
}
};
}
}
harbor 镜像搜索关键代码
public List<Object> searchRepositories(String name, String page, String pageSize) {
try {
// 构建url
StringBuilder url = new StringBuilder()
.append(harborConfig.getTemplate().getApiurl())
.append("/projects/")
.append(harborConfig.getTemplate().getProjectname())
.append("/repositories?")
.append("q=name=~").append(name);
if (StringUtils.isNotBlank(page)) {url.append("&page=").append(page);}
if (StringUtils.isNotBlank(pageSize)) {url.append("&page_size=").append(pageSize);}
// 认证
HttpHeaders headers = AuthUtils.createHeaders(
harborConfig.getTemplate().getUsername(),
harborConfig.getTemplate().getPassword()
);
//请求
ResponseEntity<List<Object>> response = restTemplate.exchange(
url.toString(),
HttpMethod.GET,
new HttpEntity<>(headers),
new ParameterizedTypeReference<List<Object>>(){}
);
return response.getBody();
} catch (Exception e) {
logger.error("【Harbor Search】镜像搜索异常, ", e);
return new ArrayList<>();
}
}
docker 认证代码
DockerContainer dc = new DockerContainer().setTag(tag);
String url = DockerApiUrlEnum.PUSH.url(host, dockerConfig.getDaemonport(), name);
DockerAuther dockerAuth = new DockerAuther()
.setPassword(dockerConfig.getPassword())
.setUsername(dockerConfig.getUsername())
.setServeraddress(dockerConfig.getHost())
.setEmail(dockerConfig.getEmail());
Connection.Response response = Jsoup.connect(url)
.timeout(TIMEOUT_THRESHOLD)
.ignoreContentType(true)
.headers(new HashMap<String, String>() {{
put("X-Registry-Auth", UriEncoder.encode(
Base64.getEncoder().encodeToString(
JSON.toJSONString(dockerAuth).getBytes(StandardCharsets.UTF_8))
)
);
put("Content-Type", APPLICATION_JSON_UTF8_VALUE);
}})
// 不加data,requestBody 不会当json格式处理, 而是默认格式
.data(BeanUtils.objToMap(dc))
.requestBody(JSON.toJSONString(dc))
.method(Connection.Method.POST)
.execute();
docker 镜像查询关键代码
public Optional<List<ImageInfo>> searchImage(String host, String imageTag) {
try {
Map<String, String[]> reference = new HashMap<String, String[]>() {{
put("reference", new String[]{imageTag});
}};
String url = DockerApiUrlEnum.IMAGE_LIST.url(host, dockerConfig.getDaemonport());
Connection.Response response = Jsoup.connect(url)
.timeout(TIMEOUT_THRESHOLD)
.ignoreContentType(true)
.header("Content-Type", APPLICATION_JSON_UTF8_VALUE)
.data("filters", JSON.toJSONString(reference))
.method(Connection.Method.GET)
.execute();
if (response.statusCode() != HttpStatus.OK.value()) {
logger.error("【DOCKER SEARCH】镜像{}@{}查找失败, response: {}", host, imageTag, response.body());
return Optional.empty();
}
if (JSON.parseArray(response.body()).isEmpty()) {
logger.info("【DOCKER SEARCH】节点{}@{}镜像不存在", host, imageTag);
return Optional.empty();
}
return Optional.of(JSON.parseArray(response.body(), ImageInfo.class));
} catch (Exception e) {
logger.error("【DOCKER SEARCH】镜像{}@{}查找失败, ", host, imageTag, e);
return Optional.empty();
}
}
网友评论