You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2022/05/14 08:56:30 UTC

[jena] branch main updated: GH-1302: Before and after servlet filters. Default to the "before" ones.

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

andy 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 57d144306f GH-1302: Before and after servlet filters. Default to the "before" ones.
     new 2042994e8f Merge pull request #1303 from afs/servlet-filters
57d144306f is described below

commit 57d144306f1d1e370e40732b59f8367dacc0bb7c
Author: Andy Seaborne <an...@apache.org>
AuthorDate: Fri May 13 14:07:40 2022 +0100

    GH-1302: Before and after servlet filters. Default to the "before" ones.
---
 .../java/org/apache/jena/fuseki/main/FusekiServer.java     | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/FusekiServer.java b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/FusekiServer.java
index 06c05b3153..7d6e9483cf 100644
--- a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/FusekiServer.java
+++ b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/FusekiServer.java
@@ -417,8 +417,9 @@ public class FusekiServer {
         // Order does not matter, the rules of pathspec dispatch are "exact match"
         // before "prefix match".
         private Map<String, HttpServlet> servlets           = new HashMap<>();
-        // whereas several filters can share a path spec an dorder matters.
-        private List<Pair<String, Filter>> filters          = new ArrayList<>();
+        // whereas several filters can share a path spec and order matters.
+        private List<Pair<String, Filter>> beforeFilters    = new ArrayList<>();
+        private List<Pair<String, Filter>> afterFilters     = new ArrayList<>();
 
         private String                   contextPath        = "/";
         private String                   staticContentDir   = null;
@@ -1000,7 +1001,7 @@ public class FusekiServer {
         public Builder addFilter(String pathSpec, Filter filter) {
             requireNonNull(pathSpec, "pathSpec");
             requireNonNull(filter, "filter");
-            filters.add(Pair.create(pathSpec, filter));
+            beforeFilters.add(Pair.create(pathSpec, filter));
             return this;
         }
 
@@ -1405,7 +1406,10 @@ public class FusekiServer {
                 addFilterHolder(context, "/*", holder);
             }
 
-            // End of chain. May dispatch and not pass on requests.
+            beforeFilters.forEach(pair -> addFilter(context, pair.getLeft(), pair.getRight()));
+
+            // End of chain though there may be custom "afterFilters".
+            // This servlet filter may dispatch and not pass on requests.
             // Looks for any URL that starts with a dataset name.
             FusekiFilter ff = new FusekiFilter();
             addFilter(context, "/*", ff);
@@ -1423,7 +1427,7 @@ public class FusekiServer {
                 addServlet(context, "/$/tasks/*", new ActionTasks());
 
             servlets.forEach((pathspecp, servlet) -> addServlet(context, pathspecp, servlet));
-            filters.forEach(pair -> addFilter(context, pair.getLeft(), pair.getRight()));
+            afterFilters.forEach(pair -> addFilter(context, pair.getLeft(), pair.getRight()));
 
             // Finally, drop to state content if configured.
             if ( staticContentDir != null ) {