From 3773fc9e54919512997450dadefb5a33e3bc847b Mon Sep 17 00:00:00 2001 From: Misagh Moayyed Date: Tue, 11 Mar 2014 04:24:27 -0700 Subject: [PATCH] CASC-219: updated javadocs and added map to keep track of pattern matchers --- .../authentication/AuthenticationFilter.java | 32 +++++++++++-------- .../UrlPatternMatcherStrategy.java | 5 ++- .../AuthenticationFilterTests.java | 4 +-- 3 files changed, 24 insertions(+), 17 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 9a6f084..900342c 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 @@ -19,6 +19,8 @@ package org.jasig.cas.client.authentication; import java.io.IOException; +import java.util.HashMap; +import java.util.Map; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; @@ -66,10 +68,18 @@ public class AuthenticationFilter extends AbstractCasFilter { private GatewayResolver gatewayStorage = new DefaultGatewayResolverImpl(); + private AuthenticationRedirectStrategy authenticationRedirectStrategy = new DefaultAuthenticationRedirectStrategy(); + private UrlPatternMatcherStrategy ignoreUrlPatternMatcherStrategyClass = null; - private AuthenticationRedirectStrategy authenticationRedirectStrategy = new DefaultAuthenticationRedirectStrategy(); - + private final Map> PATTERN_MATCHER_TYPES = + new HashMap>(); + + public AuthenticationFilter() { + this.PATTERN_MATCHER_TYPES.put("EXACT", ExactUrlPatternMatcherStrategy.class); + this.PATTERN_MATCHER_TYPES.put("REGEX", RegexUrlPatternMatcherStrategy.class); + } + protected void initInternal(final FilterConfig filterConfig) throws ServletException { if (!isIgnoreInitConfiguration()) { super.initInternal(filterConfig); @@ -83,16 +93,17 @@ public class AuthenticationFilter extends AbstractCasFilter { final String ignorePattern = getPropertyFromInitParams(filterConfig, "ignorePattern", null); logger.trace("Loaded ignorePattern parameter: {}", ignorePattern); - final String ignoreUrlMatcherClass = getPropertyFromInitParams(filterConfig, "ignoreUrlPatternMatcherStrategyClass", null); - logger.trace("Loaded ignoreUrlPatternMatcherStrategyClass parameter: {}", ignoreUrlMatcherClass); + final String ignoreUrlPatternType = getPropertyFromInitParams(filterConfig, "ignoreUrlPatternType", "REGEX"); + logger.trace("Loaded ignoreUrlPatternType parameter: {}", ignoreUrlPatternType); if (ignorePattern != null ) { + final Class ignoreUrlMatcherClass = this.PATTERN_MATCHER_TYPES.get(ignoreUrlPatternType); if (ignoreUrlMatcherClass != null) { - this.ignoreUrlPatternMatcherStrategyClass = ReflectUtils.newInstance(ignoreUrlMatcherClass); + this.ignoreUrlPatternMatcherStrategyClass = ReflectUtils.newInstance(ignoreUrlMatcherClass.getName()); + this.ignoreUrlPatternMatcherStrategyClass.setPattern(ignorePattern); } else { - this.ignoreUrlPatternMatcherStrategyClass = new RegexUrlPatternMatcherStrategy(); + logger.trace("Could not find and load: {}", ignoreUrlMatcherClass); } - this.ignoreUrlPatternMatcherStrategyClass.setPattern(ignorePattern); } final String gatewayStorageClass = getPropertyFromInitParams(filterConfig, "gatewayStorageClass", null); @@ -100,13 +111,6 @@ public class AuthenticationFilter extends AbstractCasFilter { if (gatewayStorageClass != null) { this.gatewayStorage = ReflectUtils.newInstance(gatewayStorageClass); } - - final String authenticationRedirectStrategyClass = getPropertyFromInitParams(filterConfig, - "authenticationRedirectStrategyClass", null); - - if (authenticationRedirectStrategyClass != null) { - this.authenticationRedirectStrategy = ReflectUtils.newInstance(authenticationRedirectStrategyClass); - } } } diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/authentication/UrlPatternMatcherStrategy.java b/cas-client-core/src/main/java/org/jasig/cas/client/authentication/UrlPatternMatcherStrategy.java index 2117a2a..a2e70e9 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/authentication/UrlPatternMatcherStrategy.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/authentication/UrlPatternMatcherStrategy.java @@ -19,7 +19,10 @@ package org.jasig.cas.client.authentication; /** * Defines an abstraction by which request urls can be matches against a given pattern. - * + * New instances for all extensions for this strategy interface will be created per + * each request. The client will ultimately invoke the {@link #matches(String)} method + * having already applied and set the pattern via the {@link #setPattern(String)} method. + * The pattern itself will be retrieved via the client configuration. * @author Misagh Moayyed * @since 3.3.1 */ diff --git a/cas-client-core/src/test/java/org/jasig/cas/client/authentication/AuthenticationFilterTests.java b/cas-client-core/src/test/java/org/jasig/cas/client/authentication/AuthenticationFilterTests.java index f9b8b8f..d52e18e 100644 --- a/cas-client-core/src/test/java/org/jasig/cas/client/authentication/AuthenticationFilterTests.java +++ b/cas-client-core/src/test/java/org/jasig/cas/client/authentication/AuthenticationFilterTests.java @@ -245,13 +245,13 @@ public final class AuthenticationFilterTests { } @Test - public void testIgnorePatternsWithNoRegex() throws Exception { + public void testIgnorePatternsWithExactMatching() throws Exception { final AuthenticationFilter f = new AuthenticationFilter(); final MockServletContext context = new MockServletContext(); context.addInitParameter("casServerLoginUrl", CAS_LOGIN_URL); context.addInitParameter("ignorePattern", "=valueToIgnore"); - context.addInitParameter("ignoreUrlPatternMatcherStrategyClass", ExactUrlPatternMatcherStrategy.class.getName()); + context.addInitParameter("ignoreUrlPatternType", "EXACT"); context.addInitParameter("service", CAS_SERVICE_URL); f.init(new MockFilterConfig(context));