企业代理背后的AWS Java SDK

时间:2019-02-08 14:51:53

标签: amazon-web-services aws-java-sdk

我想在本地测试我的AWS代码,因此我必须为AWS客户端设置代理。

在我的环境中,通过变量HTTPS_PROXY设置了一个代理主机(http://user@pass:my-corporate-proxy.com:8080)。

我没有找到一种方法来设置整个代理,因此我想到了以下代码:

AmazonSNS sns = AmazonSNSClientBuilder.standard()
    .withClientConfiguration(clientConfig(System.getenv("HTTPS_PROXY")))
    .withRegion(Regions.fromName(System.getenv("AWS_REGION")))
    .withCredentials(new DefaultAWSCredentialsProviderChain())
    .build();

ClientConfiguration clientConfig(String proxy) {
    ClientConfiguration configuration = new ClientConfiguration();
    if (proxy != null && !proxy.isEmpty()) {
        Matcher matcher = Pattern.compile("(\\w{3,5})://((\\w+):(\\w+)@)?(.+):(\\d{1,5})").matcher(proxy);
        if (!matcher.matches()) {
            throw new IllegalArgumentException("Proxy not valid: " + proxy);
        }
        configuration.setProxyHost(matcher.group(5));
        configuration.setProxyPort(Integer.parseInt(matcher.group(6)));
        configuration.setProxyUsername(matcher.group(3));
        configuration.setProxyPassword(matcher.group(4));
    }
    return configuration;
}

整个方法clientConfig只是样板代码。

有什么优雅的方法可以实现这一目标吗?

1 个答案:

答案 0 :(得分:0)

据我在使用AWS开发工具包V1(1.11.840)时所知,是否在运行时设置了HTTP(S)_PROXYhttp(s)_proxy之类的环境变量,或http(s).proxyHost之类的属性,proxyPortproxyUserproxyPassword传递给您的应用程序,您无需进行任何设置。 automatically被读入新创建的ClientConfigiration

因此,您只需要在需要时设置ProxyAuthenticationMethod

ClientConfiguration clientConfig(ProxyAuthenticationMethod authMethod) {
    ClientConfiguration conf = new ClientConfiguration();
    List<ProxyAuthenticationMethod> proxyAuthentication = new ArrayList<>(1);
    proxyAuthentication.add(authMethod);
    conf.setProxyAuthenticationMethods(proxyAuthentication);
    return conf;
}

ProxyAuthenticationMethod可以是ProxyAuthenticationMethod.BASICDIGESTKERBEROSNTLMSPNEGO