You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shiro.apache.org by bm...@apache.org on 2022/10/26 19:14:10 UTC

[shiro] 01/01: [SHIRO-893] Fix NPE in ShiroFilter.init()

This is an automated email from the ASF dual-hosted git repository.

bmarwell pushed a commit to branch SHIRO-893_main_npe_filter_init
in repository https://gitbox.apache.org/repos/asf/shiro.git

commit 95432841f69d91bb68c17b2174fc4de3ff209755
Author: julian-computes <ju...@gmail.com>
AuthorDate: Wed Oct 26 08:53:30 2022 -0400

    [SHIRO-893] Fix NPE in ShiroFilter.init()
    
    In 1.10.0, an NPE can be thrown because DefaultWebEnvironment has no default value for ShiroFilterConfiguration. This commit adds a default value determined by WebEnvironment.getShiroFilterConfiguration().
---
 .../apache/shiro/web/env/DefaultWebEnvironment.java  | 16 ++++++++++++++++
 .../shiro/web/env/EnvironmentLoaderServiceTest.java  | 20 ++++++++++++++++++++
 2 files changed, 36 insertions(+)

diff --git a/web/src/main/java/org/apache/shiro/web/env/DefaultWebEnvironment.java b/web/src/main/java/org/apache/shiro/web/env/DefaultWebEnvironment.java
index d5658ab4..28864222 100644
--- a/web/src/main/java/org/apache/shiro/web/env/DefaultWebEnvironment.java
+++ b/web/src/main/java/org/apache/shiro/web/env/DefaultWebEnvironment.java
@@ -84,4 +84,20 @@ public class DefaultWebEnvironment extends DefaultEnvironment implements Mutable
     public void setServletContext(ServletContext servletContext) {
         this.servletContext = servletContext;
     }
+
+    @Override
+    public void setShiroFilterConfiguration(ShiroFilterConfiguration filterConfiguration) {
+        setObject(SHIRO_FILTER_CONFIG_NAME, filterConfiguration);
+    }
+
+    @Override
+    public ShiroFilterConfiguration getShiroFilterConfiguration() {
+        ShiroFilterConfiguration config = getObject(SHIRO_FILTER_CONFIG_NAME, ShiroFilterConfiguration.class);
+        // Use the default configuration if config is null
+        if (config == null) {
+            config = MutableWebEnvironment.super.getShiroFilterConfiguration();
+            setShiroFilterConfiguration(config);
+        }
+        return config;
+    }
 }
diff --git a/web/src/test/java/org/apache/shiro/web/env/EnvironmentLoaderServiceTest.java b/web/src/test/java/org/apache/shiro/web/env/EnvironmentLoaderServiceTest.java
index 9a45d20d..db4eb5b3 100644
--- a/web/src/test/java/org/apache/shiro/web/env/EnvironmentLoaderServiceTest.java
+++ b/web/src/test/java/org/apache/shiro/web/env/EnvironmentLoaderServiceTest.java
@@ -30,6 +30,8 @@ import java.util.List;
 import static org.easymock.EasyMock.expect;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.instanceOf;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.notNullValue;
 import static org.hamcrest.Matchers.sameInstance;
 import static org.hamcrest.Matchers.stringContainsInOrder;
 import static org.mockito.Mockito.mock;
@@ -63,6 +65,24 @@ public class EnvironmentLoaderServiceTest {
         assertThat(environmentStub.getServletContext(), sameInstance(servletContext));
     }
 
+    @Test
+    public void testDefaultWebEnvironment() {
+        ServletContext servletContext = EasyMock.mock(ServletContext.class);
+        expect(servletContext.getInitParameter("shiroEnvironmentClass"))
+                .andReturn(DefaultWebEnvironment.class.getName());
+        expect(servletContext.getInitParameter("shiroConfigLocations")).andReturn(null);
+
+        EasyMock.replay(servletContext);
+
+        WebEnvironment environment = new EnvironmentLoader().createEnvironment(servletContext);
+
+        EasyMock.verify(servletContext);
+
+        assertThat(environment, instanceOf(DefaultWebEnvironment.class));
+        assertThat(environment.getShiroFilterConfiguration(), is(notNullValue()));
+        assertThat(environment.getServletContext(), sameInstance(servletContext));
+    }
+
     @Test()
     public void multipleServiceTest() throws Exception {