]> git.aero2k.de Git - tmp/jakarta-migration.git/commitdiff
DRYD-71: Implement fallback filter.
authorRay Lee <rhlee@berkeley.edu>
Wed, 27 Dec 2017 00:14:18 +0000 (16:14 -0800)
committerRay Lee <rhlee@berkeley.edu>
Wed, 27 Dec 2017 00:14:18 +0000 (16:14 -0800)
services/common/build.xml
services/common/src/main/java/org/collectionspace/services/common/filter/FallbackResourceFilter.java [new file with mode: 0644]

index e62c3dfffe896702b0c66e0a62bc11bc4ec89000..389a5d981a235fae75e68f1bf794673aba64a369 100644 (file)
@@ -11,6 +11,7 @@
     <property name="mvn.opts" value="-V" />
     <property name="src" location="src"/>
     <property name="build" location="build"/>
+    <property name="common.jar" value="collectionspace-services-common.jar"/>
 
     <condition property="osfamily-unix">
         <os family="unix" />
         <copy todir="${jee.server.cspace}/conf"
               file="${src}/main/cspace/config/log/jboss-log4j-release.xml"/>
                -->
+        <copy file="${basedir}/target/${common.jar}" todir="${jee.server.cspace}/lib"/>
+
                <antcall target="deploy_aspectj" />
         <antcall target="deploy_spring" />
         <antcall target="deploy_slf4j" />
                <!--
         <delete failonerror="false" file="${jee.server.cspace}/conf/jboss-log4j-release.xml"/>
                -->
+        <delete failonerror="false" file="${jee.server.cspace}/lib/${common.jar}"/>
         <delete failonerror="false" dir="${jee.server.cspace}/cspace/config/services"/>
     </target>
 
diff --git a/services/common/src/main/java/org/collectionspace/services/common/filter/FallbackResourceFilter.java b/services/common/src/main/java/org/collectionspace/services/common/filter/FallbackResourceFilter.java
new file mode 100644 (file)
index 0000000..e4831d3
--- /dev/null
@@ -0,0 +1,68 @@
+package org.collectionspace.services.common.filter;
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletResponseWrapper;
+
+/**
+ * A filter that forwards requests that obtain a 404 error to a fallback,
+ * similar to apache's FallbackResource directive. The path to the fallback file
+ * may be specified using the "file" init parameter. It defaults to "/index.html".
+ */
+public class FallbackResourceFilter implements Filter {
+    String fallbackFile = "/index.html";
+    @Override
+    public void init(FilterConfig filterConfig) throws ServletException {
+        String fallbackFile = filterConfig.getInitParameter("file");
+        
+        if (fallbackFile != null) {
+            this.fallbackFile = fallbackFile;
+        }
+    }
+
+    @Override
+    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+        ResponseWrapper responseWrapper = new ResponseWrapper((HttpServletResponse) response);
+
+        chain.doFilter(request, responseWrapper);
+        
+        if (responseWrapper.is404()) {
+            request.getRequestDispatcher(fallbackFile).forward(request, response);
+        }
+    }
+
+    @Override
+    public void destroy() {
+
+    }
+
+    public class ResponseWrapper extends HttpServletResponseWrapper {
+        private boolean is404 = false;
+
+        public ResponseWrapper(HttpServletResponse response) {
+            super(response);
+        }
+        
+        public boolean is404() {
+            return is404;
+        }
+
+        @Override
+        public void sendError(int sc, String msg) throws IOException {
+            if (sc == 404) {
+                is404 = true;
+            }
+            else {
+                super.sendError(sc);
+            }
+        }
+    }
+}