美文网首页
java habor认证 docker认证

java habor认证 docker认证

作者: _micang | 来源:发表于2021-07-13 09:01 被阅读0次

    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();
            }
        }
    

    相关文章

      网友评论

          本文标题:java habor认证 docker认证

          本文链接:https://www.haomeiwen.com/subject/icujpltx.html