diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/ProxyList.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/ProxyList.java index aef87d0..3a6846c 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/validation/ProxyList.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/ProxyList.java @@ -19,8 +19,9 @@ package org.jasig.cas.client.validation; import java.util.ArrayList; -import java.util.Arrays; +import java.util.HashMap; import java.util.List; +import java.util.regex.Pattern; import org.jasig.cas.client.util.CommonUtils; /** @@ -33,10 +34,20 @@ import org.jasig.cas.client.util.CommonUtils; public final class ProxyList { private final List proxyChains; + private final HashMap proxyChainRegexCache; public ProxyList(final List proxyChains) { CommonUtils.assertNotNull(proxyChains, "List of proxy chains cannot be null."); this.proxyChains = proxyChains; + + this.proxyChainRegexCache = new HashMap(); + for (final String[] list : this.proxyChains) { + for (final String item : list) { + if (item.startsWith("^")) { + this.proxyChainRegexCache.put(item, Pattern.compile(item)); + } + } + } } public ProxyList() { @@ -44,26 +55,23 @@ public final class ProxyList { } public boolean contains(String[] proxiedList) { - for (final String[] list : this.proxyChains) { - if (Arrays.equals(proxiedList, list)) { - return true; - } else { - //strings might be regex, so check for each string - if (list.length == proxiedList.length) { - boolean passed = false; - - for (int i=0; i