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
+}