From 4a20bf0e995909d8fda58f9c0485ea9eb2d43f0e Mon Sep 17 00:00:00 2001 From: Albert Choi Date: Tue, 6 Jul 2021 14:57:02 -0400 Subject: [PATCH] Backport SHIRO-825 This was causing "java.lang.IllegalArgumentException: There is no configured chain under the name/key" --- .../mgt/PathMatchingFilterChainResolver.java | 2 +- .../PathMatchingFilterChainResolverTest.java | 44 ++++++++++++++++++- 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/web/src/main/java/org/apache/shiro/web/filter/mgt/PathMatchingFilterChainResolver.java b/web/src/main/java/org/apache/shiro/web/filter/mgt/PathMatchingFilterChainResolver.java index 452d186a36..4d12bfe34f 100644 --- a/web/src/main/java/org/apache/shiro/web/filter/mgt/PathMatchingFilterChainResolver.java +++ b/web/src/main/java/org/apache/shiro/web/filter/mgt/PathMatchingFilterChainResolver.java @@ -126,7 +126,7 @@ public FilterChain getChain(ServletRequest request, ServletResponse response, Fi log.trace("Matched path pattern [{}] for requestURI [{}]. " + "Utilizing corresponding filter chain...", pathPattern, Encode.forHtml(requestURINoTrailingSlash)); } - return filterChainManager.proxy(originalChain, requestURINoTrailingSlash); + return filterChainManager.proxy(originalChain, pathPattern); } } } diff --git a/web/src/test/java/org/apache/shiro/web/filter/mgt/PathMatchingFilterChainResolverTest.java b/web/src/test/java/org/apache/shiro/web/filter/mgt/PathMatchingFilterChainResolverTest.java index f3fd0c3c3e..fffd168551 100644 --- a/web/src/test/java/org/apache/shiro/web/filter/mgt/PathMatchingFilterChainResolverTest.java +++ b/web/src/test/java/org/apache/shiro/web/filter/mgt/PathMatchingFilterChainResolverTest.java @@ -20,8 +20,6 @@ import org.apache.shiro.util.AntPathMatcher; import org.apache.shiro.web.WebTest; -import org.apache.shiro.web.util.WebUtils; -import org.hamcrest.Matchers; import org.junit.Before; import org.junit.Test; @@ -263,4 +261,46 @@ public void testMultipleChainsPathEndsWithSlash() { assertThat(resolved, notNullValue()); verify(request); } + + /** + * Test asserting SHIRO-825. + */ + @Test + public void testGetChainWhenPathEndsWithSlash() { + HttpServletRequest request = createNiceMock(HttpServletRequest.class); + HttpServletResponse response = createNiceMock(HttpServletResponse.class); + FilterChain chain = createNiceMock(FilterChain.class); + + //ensure at least one chain is defined: + resolver.getFilterChainManager().addToChain("/resource/*/book", "authcBasic"); + + expect(request.getServletPath()).andReturn(""); + expect(request.getPathInfo()).andReturn("/resource/123/book/"); + replay(request); + + FilterChain resolved = resolver.getChain(request, response, chain); + assertNotNull(resolved); + verify(request); + } + + /** + * Test asserting SHIRO-825. + */ + @Test + public void testGetChainWhenPathDoesNotEndWithSlash() { + HttpServletRequest request = createNiceMock(HttpServletRequest.class); + HttpServletResponse response = createNiceMock(HttpServletResponse.class); + FilterChain chain = createNiceMock(FilterChain.class); + + //ensure at least one chain is defined: + resolver.getFilterChainManager().addToChain("/resource/*/book", "authcBasic"); + + expect(request.getServletPath()).andReturn(""); + expect(request.getPathInfo()).andReturn("/resource/123/book"); + replay(request); + + FilterChain resolved = resolver.getChain(request, response, chain); + assertNotNull(resolved); + verify(request); + } }