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

afs pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git


The following commit(s) were added to refs/heads/main by this push:
     new 1340a3f463 GH-4033: Tidy up FMod_Shiro session code
1340a3f463 is described below

commit 1340a3f46367d22b901e77e7e715c2193e7558fc
Author: Andy Seaborne <[email protected]>
AuthorDate: Tue Jul 7 12:13:08 2026 +0100

    GH-4033: Tidy up FMod_Shiro session code
---
 .../apache/jena/fuseki/mod/shiro/FMod_Shiro.java   | 43 +++++++++++-----------
 .../apache/jena/fuseki/mod/shiro/FusekiShiro.java  |  3 +-
 .../FusekiShiroEnvironmentLoaderListener.java      | 20 ++++++++++
 .../jena/fuseki/mod/shiro/FusekiShiroFilter.java   | 10 ++---
 4 files changed, 49 insertions(+), 27 deletions(-)

diff --git 
a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/mod/shiro/FMod_Shiro.java
 
b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/mod/shiro/FMod_Shiro.java
index da8acf965e..3637fe8156 100644
--- 
a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/mod/shiro/FMod_Shiro.java
+++ 
b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/mod/shiro/FMod_Shiro.java
@@ -77,18 +77,18 @@ public class FMod_Shiro implements FusekiModule {
     /** Shiro configuration file given a a command line argument. */
     private String argShiroFile = null;
 
-    /** Control for whether to have Jetty/Jakarta sessions,
-     * which are then used by Shiro.
-     * But they don't get cleared up and keep hold of RAM.
+    /**
+     * Control for whether to have Jetty/Jakarta sessions.
+     * But the HTTP sessions don't get cleared up and keep hold of RAM.
      * See <a href="https://github.com/apache/jena/issues/4033";>GH-4033</a>.
      * <p>
-     * If {@code true}, then disable Shiro session creation on every request,
-     * and don't create a Jetty sever session manager.
+     * If NO_SESSIONS is {@code true}, then disable Shiro session creation
+     * on every request, and don't create a Jetty sever session manager.
      * <p>
      * It the future, it is likely that this flag is dropped
-     * and the code support only "disabled sessions".
+     * and the code support only "no sessions" for {@code FMod_Shiro}.
      */
-    private static final boolean DISABLE_SESSIONS = false;
+    private static final boolean NO_SESSIONS = true;
 
     public FMod_Shiro() {}
 
@@ -147,10 +147,10 @@ public class FMod_Shiro implements FusekiModule {
         return null;
     }
 
-     /**
-      * Determine the Shiro configuration file.
-      * This applies whether command line arguments used for programmatic 
setup.
-      */
+    /**
+     * Determine the Shiro configuration file.
+     * This applies whether command line arguments used for programmatic setup.
+     */
     @Override
     public void prepare(FusekiServer.Builder serverBuilder, Set<String> 
datasetNames, Model configModel) {
         String shiroConfig = decideShiroConfiguration(serverBuilder);
@@ -162,27 +162,30 @@ public class FMod_Shiro implements FusekiModule {
         if ( ! ResourceUtils.resourceExists(shiroResourceName) )
             throw new FusekiConfigException("Shiro resource does not exist");
 
-        Filter filter = new FusekiShiroFilter(shiroResourceName, 
DISABLE_SESSIONS);
+        Filter filter = new FusekiShiroFilter(shiroResourceName, NO_SESSIONS);
         // This is a "before" filter.
         serverBuilder.addFilter("/*", filter);
         serverBuilder.setServletAttribute(Fuseki.attrShiroResource, 
shiroResourceName);
         // Clear.
         this.argShiroFile = null;
+        FmtLog.info(shiroConfigLog, "Shiro configuration: %s", 
shiroResourceName);
     }
 
+    // When NO_SESSIONS becomes permanent, serverBeforeStarting(), 
addHttpSessionListener() can be removed.
     @Override
     public void serverBeforeStarting(FusekiServer server) {
+        if ( NO_SESSIONS )
+            return;
+
         try {
             String x 
=(String)server.getServletContext().getAttribute(Fuseki.attrShiroResource);
-            if ( x != null )
-                FmtLog.info(shiroConfigLog, "Shiro configuration: %s", x);
-            //            else
-            //                FmtLog.info(shiroConfigLog, "No Shiro 
configuration");
+            if ( x == null )
+                return ;
         } catch (ClassCastException ex) {
             FmtLog.warn(shiroConfigLog, "Unexpected Shiro configuration: %s", 
server.getServletContext().getAttribute(Fuseki.attrShiroResource));
         }
 
-        if ( ! DISABLE_SESSIONS ) {
+        if ( ! NO_SESSIONS ) {
             // If shiro requires a session handler.
             // This needs the Jetty server to have been created.
             // Allocate a Jakarta SessionHandler
@@ -192,7 +195,7 @@ public class FMod_Shiro implements FusekiModule {
                 ServletContextHandler servletContextHandler = 
(ServletContextHandler)(jettyServer.getHandler());
                 if ( servletContextHandler.getSessionHandler() == null ) {
                     SessionHandler sessionHandler = new SessionHandler();
-                    if ( true )
+                    if ( false )
                         addHttpSessionListener(sessionHandler);
                     servletContextHandler.setHandler(sessionHandler);
                 }
@@ -203,10 +206,8 @@ public class FMod_Shiro implements FusekiModule {
         }
     }
 
-
     // Later:
-    // Reload shirio.ini file and reset.
-//    // Currently, no actual - the server admin area does not move during the 
run of a server.
+    // Reload shiro.ini file and reset. See FusekiShiroEnvironmentLoader.
 //    /** {@inheritDoc} */
 //    @Override
 //    public void serverReload(FusekiServer server) { }
diff --git 
a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/mod/shiro/FusekiShiro.java
 
b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/mod/shiro/FusekiShiro.java
index 2d418c859e..2435ecb82d 100644
--- 
a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/mod/shiro/FusekiShiro.java
+++ 
b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/mod/shiro/FusekiShiro.java
@@ -38,7 +38,8 @@ import org.slf4j.LoggerFactory;
     public static final Logger shiroLog = LoggerFactory.getLogger(Fuseki.PATH 
+ ".Shiro");
 
     static void shiroEnvironment(ServletContext servletContext, List<String> 
possibleShiroIniFiles) {
-        // Shiro environment initialization, done here because we don't have 
webapp listeners.
+        // Shiro environment initialization, done here because
+        // we don't have webapp listeners.
         EnvironmentLoaderListener shiroListener = new 
FusekiShiroEnvironmentLoaderListener(possibleShiroIniFiles);
         // Silence these - handle the errors ourselves.
         LogCtl.disable(org.apache.shiro.web.env.IniWebEnvironment.class);
diff --git 
a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/mod/shiro/FusekiShiroEnvironmentLoaderListener.java
 
b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/mod/shiro/FusekiShiroEnvironmentLoaderListener.java
index 72c02e2827..1f5a39f5d1 100644
--- 
a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/mod/shiro/FusekiShiroEnvironmentLoaderListener.java
+++ 
b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/mod/shiro/FusekiShiroEnvironmentLoaderListener.java
@@ -42,6 +42,20 @@ class FusekiShiroEnvironmentLoaderListener extends 
EnvironmentLoaderListener{
         this.locations = locations;
     }
 
+    // Public lifecycle
+//    @Override
+//    public WebEnvironment createEnvironment(ServletContext sc) {
+//        return super.createEnvironment(sc);
+//    }
+//    @Override
+//    public WebEnvironment initEnvironment(ServletContext servletContext) 
throws IllegalStateException {
+//        return super.initEnvironment(servletContext);
+//    }
+//    @Override
+//    public void destroyEnvironment(ServletContext sc) {
+//        super.destroyEnvironment(sc);
+//    }
+
     /**
      * When given multiple locations for the shiro.ini file, and
      * if a {@link ResourceBasedWebEnvironment}, check the list of 
configuration
@@ -76,4 +90,10 @@ class FusekiShiroEnvironmentLoaderListener extends 
EnvironmentLoaderListener{
             env.setConfigLocations(configLocationsHere);
         }
     }
+
+    // customizeEnvironment/finalizeEnvironment pair
+//    @Override
+//    protected void finalizeEnvironment(WebEnvironment environment) {
+//        super.finalizeEnvironment(environment);
+//    }
 }
diff --git 
a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/mod/shiro/FusekiShiroFilter.java
 
b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/mod/shiro/FusekiShiroFilter.java
index dbcd5fe984..7c38e9320a 100644
--- 
a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/mod/shiro/FusekiShiroFilter.java
+++ 
b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/mod/shiro/FusekiShiroFilter.java
@@ -38,12 +38,12 @@ import org.apache.shiro.web.servlet.ShiroFilter;
 /*package*/ class FusekiShiroFilter extends ShiroFilter {
 
     private final String shiroInitializationResource;
-    private final boolean disableSessions;
+    private final boolean disableShiroSessions;
 
-    /*package*/ FusekiShiroFilter(String shiroResourceName, boolean 
disableSessions) {
+    /*package*/ FusekiShiroFilter(String shiroResourceName, boolean 
disableShiroSessions) {
         // Shiro file -- URLs are "file:<no encoding>"
         this.shiroInitializationResource = shiroResourceName;
-        this.disableSessions = disableSessions;
+        this.disableShiroSessions = disableShiroSessions;
     }
 
     @Override
@@ -64,11 +64,11 @@ import org.apache.shiro.web.servlet.ShiroFilter;
 
     @Override
     protected ServletRequest prepareServletRequest(ServletRequest request, 
ServletResponse response, FilterChain chain) {
-        if ( disableSessions ) {
+        if ( disableShiroSessions ) {
             // GH-4033 : https://github.com/apache/jena/issues/4033
             // See NoSessionCreationFilter
             
request.setAttribute(DefaultSubjectContext.SESSION_CREATION_ENABLED, 
Boolean.FALSE);
         }
         return super.prepareServletRequest(request, response, chain);
     }
-}
\ No newline at end of file
+}

Reply via email to