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 <[email protected]>
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 -> {