From 0ef575ae842bde39c881196f81236a7c93f05f2a Mon Sep 17 00:00:00 2001 From: John Gasper Date: Fri, 7 Mar 2014 16:11:00 -0800 Subject: [PATCH] Refactored the match logic and cache the regex patterns. --- .../cas/client/validation/ProxyList.java | 48 +++++++++++-------- 1 file changed, 28 insertions(+), 20 deletions(-) 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