From 511bce24711a91dc47c8a2e71b44efdce9f66b80 Mon Sep 17 00:00:00 2001 From: Misagh Moayyed Date: Tue, 11 Mar 2014 05:04:59 -0700 Subject: [PATCH] CASC-219: allowed extensions for ignoring urls --- .../authentication/AuthenticationFilter.java | 20 ++++++- .../AuthenticationFilterTests.java | 58 +++++++++++++++++++ 2 files changed, 75 insertions(+), 3 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 900342c..d2fa5ef 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 @@ -96,13 +96,20 @@ public class AuthenticationFilter extends AbstractCasFilter { final String ignoreUrlPatternType = getPropertyFromInitParams(filterConfig, "ignoreUrlPatternType", "REGEX"); logger.trace("Loaded ignoreUrlPatternType parameter: {}", ignoreUrlPatternType); - if (ignorePattern != null ) { + if (ignorePattern != null) { final Class ignoreUrlMatcherClass = this.PATTERN_MATCHER_TYPES.get(ignoreUrlPatternType); if (ignoreUrlMatcherClass != null) { this.ignoreUrlPatternMatcherStrategyClass = ReflectUtils.newInstance(ignoreUrlMatcherClass.getName()); - this.ignoreUrlPatternMatcherStrategyClass.setPattern(ignorePattern); } else { - logger.trace("Could not find and load: {}", ignoreUrlMatcherClass); + try { + logger.trace("Assuming {} is a qualfiied class name...", ignoreUrlPatternType); + this.ignoreUrlPatternMatcherStrategyClass = ReflectUtils.newInstance(ignoreUrlPatternType); + } catch (final IllegalArgumentException e) { + logger.warn("Could not instantiate class [{}]: [{}]", ignoreUrlPatternType, e.getMessage()); + } + } + if (this.ignoreUrlPatternMatcherStrategyClass != null) { + this.ignoreUrlPatternMatcherStrategyClass.setPattern(ignorePattern); } } @@ -111,6 +118,13 @@ 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/test/java/org/jasig/cas/client/authentication/AuthenticationFilterTests.java b/cas-client-core/src/test/java/org/jasig/cas/client/authentication/AuthenticationFilterTests.java index d52e18e..d006188 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 @@ -272,4 +272,62 @@ public final class AuthenticationFilterTests { f.doFilter(request, response, filterChain); assertNull(response.getRedirectedUrl()); } + + @Test + public void testIgnorePatternsWithExactClassname() throws Exception { + final AuthenticationFilter f = new AuthenticationFilter(); + final MockServletContext context = new MockServletContext(); + context.addInitParameter("casServerLoginUrl", CAS_LOGIN_URL); + + context.addInitParameter("ignorePattern", "=valueToIgnore"); + context.addInitParameter("ignoreUrlPatternType", ExactUrlPatternMatcherStrategy.class.getName()); + context.addInitParameter("service", CAS_SERVICE_URL); + f.init(new MockFilterConfig(context)); + + final MockHttpServletRequest request = new MockHttpServletRequest(); + final String URL = CAS_SERVICE_URL + "?param=valueToIgnore"; + request.setRequestURI(URL); + + final MockHttpSession session = new MockHttpSession(); + request.setSession(session); + + final MockHttpServletResponse response = new MockHttpServletResponse(); + + final FilterChain filterChain = new FilterChain() { + public void doFilter(ServletRequest request, ServletResponse response) throws IOException, ServletException { + } + }; + + f.doFilter(request, response, filterChain); + assertNull(response.getRedirectedUrl()); + } + + @Test + public void testIgnorePatternsWithInvalidClassname() throws Exception { + final AuthenticationFilter f = new AuthenticationFilter(); + final MockServletContext context = new MockServletContext(); + context.addInitParameter("casServerLoginUrl", CAS_LOGIN_URL); + + context.addInitParameter("ignorePattern", "=valueToIgnore"); + context.addInitParameter("ignoreUrlPatternType", "unknown.class.name"); + context.addInitParameter("service", CAS_SERVICE_URL); + f.init(new MockFilterConfig(context)); + + final MockHttpServletRequest request = new MockHttpServletRequest(); + final String URL = CAS_SERVICE_URL + "?param=valueToIgnore"; + request.setRequestURI(URL); + + final MockHttpSession session = new MockHttpSession(); + request.setSession(session); + + final MockHttpServletResponse response = new MockHttpServletResponse(); + + final FilterChain filterChain = new FilterChain() { + public void doFilter(ServletRequest request, ServletResponse response) throws IOException, ServletException { + } + }; + + f.doFilter(request, response, filterChain); + System.out.println(response.getRedirectedUrl()); + } }