You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2022/10/12 09:39:18 UTC

[isis] branch master updated: ISIS-3246: shiro: initialize a ShiroFilterConfiguration if there is none yet

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

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new ba2f1f8dfb ISIS-3246: shiro: initialize a ShiroFilterConfiguration if there is none yet
ba2f1f8dfb is described below

commit ba2f1f8dfba3001caac6dde75cd0a80fbfa86714
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Oct 12 11:39:10 2022 +0200

    ISIS-3246: shiro: initialize a ShiroFilterConfiguration if there is none
    yet
---
 .../security/shiro/webmodule/WebModuleShiro.java   | 24 +++++++++++++++-------
 1 file changed, 17 insertions(+), 7 deletions(-)

diff --git a/security/shiro/src/main/java/org/apache/isis/security/shiro/webmodule/WebModuleShiro.java b/security/shiro/src/main/java/org/apache/isis/security/shiro/webmodule/WebModuleShiro.java
index d0e7169614..34e133e2c3 100644
--- a/security/shiro/src/main/java/org/apache/isis/security/shiro/webmodule/WebModuleShiro.java
+++ b/security/shiro/src/main/java/org/apache/isis/security/shiro/webmodule/WebModuleShiro.java
@@ -33,8 +33,10 @@ import javax.servlet.ServletException;
 
 import org.apache.shiro.config.Ini;
 import org.apache.shiro.realm.Realm;
+import org.apache.shiro.web.config.ShiroFilterConfiguration;
 import org.apache.shiro.web.env.EnvironmentLoaderListener;
 import org.apache.shiro.web.env.IniWebEnvironment;
+import org.apache.shiro.web.env.MutableWebEnvironment;
 import org.apache.shiro.web.env.WebEnvironment;
 import org.apache.shiro.web.filter.mgt.PathMatchingFilterChainResolver;
 import org.apache.shiro.web.servlet.ShiroFilter;
@@ -46,6 +48,7 @@ import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.services.inject.ServiceInjector;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.commons.internal._Constants;
+import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.core.webapp.modules.WebModuleAbstract;
 import org.apache.isis.core.webapp.modules.WebModuleContext;
@@ -80,7 +83,7 @@ public class WebModuleShiro extends WebModuleAbstract {
 
     // -- CONFIGURATION
 
-    public static void setShiroEnvironmentClass(Class<? extends WebEnvironment> shiroEnvironmentClass) {
+    public static void setShiroEnvironmentClass(final Class<? extends WebEnvironment> shiroEnvironmentClass) {
         if(shiroEnvironmentClass==null) {
             System.setProperty("shiroEnvironmentClass", null);
             return;
@@ -108,7 +111,7 @@ public class WebModuleShiro extends WebModuleAbstract {
         }
     }
 
-    public static void setShiroIniResource(String resourcePath) {
+    public static void setShiroIniResource(final String resourcePath) {
         if(resourcePath==null) {
             System.setProperty("shiroIniResource", null);
             setShiroEnvironmentClass(null);
@@ -128,29 +131,36 @@ public class WebModuleShiro extends WebModuleAbstract {
         @Inject private ServiceInjector serviceInjector;
 
         // testing support
-        public EnvironmentLoaderListenerForIsis(ServiceInjector serviceInjector) {
+        public EnvironmentLoaderListenerForIsis(final ServiceInjector serviceInjector) {
             this.serviceInjector = serviceInjector;
         }
 
         @Override
-        public void contextInitialized(ServletContextEvent sce) {
+        public void contextInitialized(final ServletContextEvent sce) {
             super.contextInitialized(sce);
         }
 
         @Override
-        protected WebEnvironment createEnvironment(ServletContext servletContext) {
+        protected WebEnvironment createEnvironment(final ServletContext servletContext) {
             val shiroEnvironment = super.createEnvironment(servletContext);
             val securityManager = shiroEnvironment.getSecurityManager();
 
             injectServicesIntoRealms(securityManager);
 
+            //[ISIS-3246] Shiro Filter throws NPE on init since Shiro v1.10.0
+            if(shiroEnvironment.getShiroFilterConfiguration()==null) {
+                _Casts.castTo(MutableWebEnvironment.class, shiroEnvironment)
+                .ifPresent(mutableWebEnvironment->
+                    mutableWebEnvironment.setShiroFilterConfiguration(new ShiroFilterConfiguration()));
+            }
+
             return shiroEnvironment;
         }
 
         @SuppressWarnings("unchecked")
         @SneakyThrows
         public void injectServicesIntoRealms(
-                org.apache.shiro.mgt.SecurityManager securityManager) {
+                final org.apache.shiro.mgt.SecurityManager securityManager) {
 
             // reflective access to SecurityManager.getRealms()
             val realmsGetter = ReflectionUtils
@@ -184,7 +194,7 @@ public class WebModuleShiro extends WebModuleAbstract {
     }
 
     @Override
-    public Can<ServletContextListener> init(ServletContext ctx) throws ServletException {
+    public Can<ServletContextListener> init(final ServletContext ctx) throws ServletException {
 
         registerFilter(ctx, SHIRO_FILTER_NAME, ShiroFilter.class)
             .ifPresent(filterReg -> {