diff --git a/README.md b/README.md index e40c6fc..a8e8646 100644 --- a/README.md +++ b/README.md @@ -115,6 +115,10 @@ network: proxy: enable: true # allows disabling auto-config; enabled by default + alwaysPrint: false #allow the info log showing the proxy used every time a call is made + + exclusions: []# remove log for this hosts while alwaysprint is enabled + # explicit list of proxy servers with settings servers: # 1: the intranet proxy (doesn't require any authentication) diff --git a/pom.xml b/pom.xml index db73c93..854662f 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.orange.common spring-boot-autoconfigure-proxy - 1.0.2 + 1.0.3 spring-boot-autoconfigure-proxy Spring Boot AutoConfigure Proxy diff --git a/src/main/java/com/orange/common/springboot/autoconfigure/proxy/MultiProxySelector.java b/src/main/java/com/orange/common/springboot/autoconfigure/proxy/MultiProxySelector.java index 2e530ec..7036abe 100644 --- a/src/main/java/com/orange/common/springboot/autoconfigure/proxy/MultiProxySelector.java +++ b/src/main/java/com/orange/common/springboot/autoconfigure/proxy/MultiProxySelector.java @@ -8,6 +8,8 @@ import java.util.*; import java.util.regex.PatternSyntaxException; import java.util.stream.Collectors; +import org.springframework.util.CollectionUtils; + /** * This is a {@link ProxySelector} implementation able to manage several {@link Proxy} depending on the uri scheme and host @@ -85,10 +87,17 @@ public int hashCode() { private final List proxies; + private final boolean alwaysPrint; + + private final List exclusions; + private Map> hostname2Proxies = new HashMap<>(); - private MultiProxySelector(List proxies) { + private MultiProxySelector(List proxies, boolean alwaysPrint, + List exclusions) { this.proxies = proxies; + this.alwaysPrint = alwaysPrint; + this.exclusions = exclusions; } @Override @@ -126,7 +135,13 @@ public List select(URI uri) { throw new IllegalArgumentException("protocol = " + protocol + " host = " + host); } - return hostname2Proxies.computeIfAbsent(new SchemeAndHost(protocol, host), this::doGetProxies); + SchemeAndHost schemeAndHost = new SchemeAndHost(protocol, host); + List proxiesList = + hostname2Proxies.computeIfAbsent(schemeAndHost, this::doGetProxies); + if (alwaysPrint && !CollectionUtils.contains(exclusions.iterator(), host)) { + LOGGER.info("Proxies for [{}] : {}", schemeAndHost, proxiesList); + } + return proxiesList; } private List doGetProxies(SchemeAndHost schemeAndHost) { @@ -151,7 +166,8 @@ public String toString() { '}'; } - static MultiProxySelector build(List proxies) { + static MultiProxySelector build(List proxies, + boolean alwaysPrint, List exclusions) { List proxyEntries = new ArrayList<>(); for (int i = 0; i < proxies.size(); i++) { NetworkProxyProperties.ProxyServerConfig cfg = proxies.get(i); @@ -190,6 +206,6 @@ static MultiProxySelector build(List p proxyEntries.add(new ProxyEntry(cfg, proxy, positiveMatchers, negativeMatchers)); } - return new MultiProxySelector(proxyEntries); + return new MultiProxySelector(proxyEntries, alwaysPrint, exclusions); } } diff --git a/src/main/java/com/orange/common/springboot/autoconfigure/proxy/NetworkProxyAutoConfiguration.java b/src/main/java/com/orange/common/springboot/autoconfigure/proxy/NetworkProxyAutoConfiguration.java index 0b346e5..816fb09 100644 --- a/src/main/java/com/orange/common/springboot/autoconfigure/proxy/NetworkProxyAutoConfiguration.java +++ b/src/main/java/com/orange/common/springboot/autoconfigure/proxy/NetworkProxyAutoConfiguration.java @@ -38,7 +38,8 @@ public void setupProxyConfiguration() { LOGGER.info("Configuring proxies from Spring Boot configuration"); // install proxy selector - ProxySelector.setDefault(MultiProxySelector.build(properties.getServers())); + ProxySelector.setDefault(MultiProxySelector.build(properties.getServers(), + properties.isAlwaysPrint(), properties.getExclusions())); // set password authentication for every proxy that need one for (NetworkProxyProperties.ProxyServerConfig cfg : properties.getServers()) { diff --git a/src/main/java/com/orange/common/springboot/autoconfigure/proxy/NetworkProxyProperties.java b/src/main/java/com/orange/common/springboot/autoconfigure/proxy/NetworkProxyProperties.java index 85b2f22..5df784f 100644 --- a/src/main/java/com/orange/common/springboot/autoconfigure/proxy/NetworkProxyProperties.java +++ b/src/main/java/com/orange/common/springboot/autoconfigure/proxy/NetworkProxyProperties.java @@ -21,6 +21,18 @@ public class NetworkProxyProperties implements Validator { */ private boolean enabled = true; + /** + * Whether to enable the print of the proxy used every time. + */ + private boolean alwaysPrint = false; + + + /** + * Exclude logs for those hosts + */ + private List exclusions = Collections.emptyList(); + + /** * Explicit network proxy servers configuration */ @@ -43,10 +55,28 @@ public void setServers(List servers) { this.servers = servers; } + public List getExclusions() { + return exclusions; + } + + public void setExclusions(List exclusions) { + this.exclusions = exclusions; + } + + public boolean isAlwaysPrint() { + return alwaysPrint; + } + + public void setAlwaysPrint(boolean alwaysPrint) { + this.alwaysPrint = alwaysPrint; + } + @Override public String toString() { return "NetworkProxyProperties{" + "enabled=" + enabled + + ", alwaysPrint= " +alwaysPrint + + ", exclusions= " +exclusions + ", servers=" + servers + '}'; }