From dd6d197f796e406cac846b325ffc05c0fe1b3495 Mon Sep 17 00:00:00 2001 From: Misagh Moayyed Date: Wed, 7 Sep 2016 16:33:00 +0430 Subject: [PATCH] Allow url patterns to be included --- .../authentication/AuthenticationFilter.java | 56 +++++++++++-------- .../configuration/ConfigurationKeys.java | 2 + 2 files changed, 36 insertions(+), 22 deletions(-) diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/authentication/AuthenticationFilter.java b/cas-client-core/src/main/java/org/jasig/cas/client/authentication/AuthenticationFilter.java index d5e7fe4..82c16ae 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/authentication/AuthenticationFilter.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/authentication/AuthenticationFilter.java @@ -28,6 +28,7 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.jasig.cas.client.Protocol; +import org.jasig.cas.client.configuration.ConfigurationKey; import org.jasig.cas.client.configuration.ConfigurationKeys; import org.jasig.cas.client.util.AbstractCasFilter; import org.jasig.cas.client.util.CommonUtils; @@ -72,7 +73,9 @@ public class AuthenticationFilter extends AbstractCasFilter { private AuthenticationRedirectStrategy authenticationRedirectStrategy = new DefaultAuthenticationRedirectStrategy(); private UrlPatternMatcherStrategy ignoreUrlPatternMatcherStrategyClass = null; - + + private UrlPatternMatcherStrategy includeUrlPatternMatcherStrategyClass = null; + private static final Map> PATTERN_MATCHER_TYPES = new HashMap>(); @@ -96,26 +99,12 @@ public class AuthenticationFilter extends AbstractCasFilter { setCasServerLoginUrl(getString(ConfigurationKeys.CAS_SERVER_LOGIN_URL)); setRenew(getBoolean(ConfigurationKeys.RENEW)); setGateway(getBoolean(ConfigurationKeys.GATEWAY)); - - final String ignorePattern = getString(ConfigurationKeys.IGNORE_PATTERN); - final String ignoreUrlPatternType = getString(ConfigurationKeys.IGNORE_URL_PATTERN_TYPE); - - if (ignorePattern != null) { - final Class ignoreUrlMatcherClass = PATTERN_MATCHER_TYPES.get(ignoreUrlPatternType); - if (ignoreUrlMatcherClass != null) { - this.ignoreUrlPatternMatcherStrategyClass = ReflectUtils.newInstance(ignoreUrlMatcherClass.getName()); - } else { - try { - logger.trace("Assuming {} is a qualified class name...", ignoreUrlPatternType); - this.ignoreUrlPatternMatcherStrategyClass = ReflectUtils.newInstance(ignoreUrlPatternType); - } catch (final IllegalArgumentException e) { - logger.error("Could not instantiate class [{}]", ignoreUrlPatternType, e); - } - } - if (this.ignoreUrlPatternMatcherStrategyClass != null) { - this.ignoreUrlPatternMatcherStrategyClass.setPattern(ignorePattern); - } - } + + configureUrlPatternMatchers(ConfigurationKeys.IGNORE_PATTERN, ConfigurationKeys.IGNORE_URL_PATTERN_TYPE, + this.ignoreUrlPatternMatcherStrategyClass); + + configureUrlPatternMatchers(ConfigurationKeys.INCLUDE_PATTERN, ConfigurationKeys.INCLUDE_URL_PATTERN_TYPE, + this.includeUrlPatternMatcherStrategyClass); final Class gatewayStorageClass = getClass(ConfigurationKeys.GATEWAY_STORAGE_CLASS); @@ -199,7 +188,30 @@ public class AuthenticationFilter extends AbstractCasFilter { public final void setGatewayStorage(final GatewayResolver gatewayStorage) { this.gatewayStorage = gatewayStorage; } - + + private void configureUrlPatternMatchers(final ConfigurationKey keyName, + final ConfigurationKey patternTypeKeyName, + final UrlPatternMatcherStrategy urlPatternMatcherStrategy) { + final String pattern = getString(keyName); + final String patternType = getString(patternTypeKeyName); + + if (pattern != null) { + final Class ignoreUrlMatcherClass = PATTERN_MATCHER_TYPES.get(patternType); + if (ignoreUrlMatcherClass != null) { + this.ignoreUrlPatternMatcherStrategyClass = ReflectUtils.newInstance(ignoreUrlMatcherClass.getName()); + } else { + try { + logger.trace("Assuming {} is a qualified class name...", patternType); + this.ignoreUrlPatternMatcherStrategyClass = ReflectUtils.newInstance(patternType); + } catch (final IllegalArgumentException e) { + logger.error("Could not instantiate class [{}]", patternType, e); + } + } + if (urlPatternMatcherStrategy != null) { + urlPatternMatcherStrategy.setPattern(pattern); + } + } + } private boolean isRequestUrlExcluded(final HttpServletRequest request) { if (this.ignoreUrlPatternMatcherStrategyClass == null) { return false; diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/configuration/ConfigurationKeys.java b/cas-client-core/src/main/java/org/jasig/cas/client/configuration/ConfigurationKeys.java index 14ec120..7586e76 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/configuration/ConfigurationKeys.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/configuration/ConfigurationKeys.java @@ -63,6 +63,8 @@ public interface ConfigurationKeys { ConfigurationKey DISABLE_XML_SCHEMA_VALIDATION = new ConfigurationKey("disableXmlSchemaValidation", Boolean.FALSE); ConfigurationKey IGNORE_PATTERN = new ConfigurationKey("ignorePattern", null); ConfigurationKey IGNORE_URL_PATTERN_TYPE = new ConfigurationKey("ignoreUrlPatternType", "REGEX"); + ConfigurationKey INCLUDE_PATTERN = new ConfigurationKey("includePattern", null); + ConfigurationKey INCLUDE_URL_PATTERN_TYPE = new ConfigurationKey("includeUrlPatternType", "REGEX"); ConfigurationKey> HOSTNAME_VERIFIER = new ConfigurationKey>("hostnameVerifier", null); ConfigurationKey HOSTNAME_VERIFIER_CONFIG = new ConfigurationKey("hostnameVerifierConfig", null); ConfigurationKey EXCEPTION_ON_VALIDATION_FAILURE = new ConfigurationKey("exceptionOnValidationFailure", Boolean.TRUE);