Redirect path to entry points
authorMathieu Baudier <mbaudier@argeo.org>
Thu, 12 Feb 2015 15:03:40 +0000 (15:03 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Thu, 12 Feb 2015 15:03:40 +0000 (15:03 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@7819 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

org.argeo.cms/src/org/argeo/cms/internal/kernel/HttpFilter.java
org.argeo.cms/src/org/argeo/cms/internal/kernel/KernelConstants.java
org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeHttp.java

index 7c2151ebbc7776e7dff5ef0ad590d40cac0c61d2..a98f885b09fbe76c8274c769a162863df6b71506 100644 (file)
@@ -1,6 +1,7 @@
 package org.argeo.cms.internal.kernel;
 
 import java.io.IOException;
+import java.util.Enumeration;
 
 import javax.servlet.Filter;
 import javax.servlet.FilterChain;
@@ -12,8 +13,13 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
 /** Abstract base class for http filters. */
 abstract class HttpFilter implements Filter {
+       private final static Log log = LogFactory.getLog(HttpFilter.class);
+
        protected abstract void doFilter(HttpSession httpSession,
                        HttpServletRequest request, HttpServletResponse response,
                        FilterChain filterChain) throws IOException, ServletException;
@@ -23,6 +29,23 @@ abstract class HttpFilter implements Filter {
                        ServletResponse servletResponse, FilterChain filterChain)
                        throws IOException, ServletException {
                HttpServletRequest request = (HttpServletRequest) servletRequest;
+               if (log.isDebugEnabled()) {
+                       log.debug(request.getContextPath());
+                       log.debug(request.getServletPath());
+                       log.debug(request.getRequestURI());
+                       log.debug(request.getQueryString());
+                       StringBuilder buf = new StringBuilder();
+                       Enumeration<String> en = request.getHeaderNames();
+                       while (en.hasMoreElements()) {
+                               String header = en.nextElement();
+                               Enumeration<String> values = request.getHeaders(header);
+                               while (values.hasMoreElements())
+                                       buf.append("  " + header + ": " + values.nextElement());
+                               buf.append('\n');
+                       }
+                       log.debug(buf);
+               }
+
                doFilter(request.getSession(), request,
                                (HttpServletResponse) servletResponse, filterChain);
        }
index 1c6f8f020f39e41dc91f3342a345f7b7f6f1a76d..eab67785e9da8eef436e15a4ab5ae7323e085dec 100644 (file)
@@ -29,10 +29,13 @@ public interface KernelConstants {
 
        // DAV
        final static String WEBDAV_CONFIG = "/org/argeo/cms/internal/kernel/webdav-config.xml";
-       final static String PATH_WEBDAV_PUBLIC = "/data/public";
-       final static String PATH_WEBDAV_PRIVATE = "/data/files";
-       final static String PATH_REMOTING_PUBLIC = "/data/pub";
-       final static String PATH_REMOTING_PRIVATE = "/data/jcr";
+       final static String PATH_DATA = "/data";
+       final static String PATH_WEBDAV_PUBLIC = PATH_DATA + "/public";
+       final static String PATH_WEBDAV_PRIVATE = PATH_DATA + "/files";
+       final static String PATH_REMOTING_PUBLIC = PATH_DATA + "/pub";
+       final static String PATH_REMOTING_PRIVATE = PATH_DATA + "/jcr";
+
+       // RWT / RAP
        final static String PATH_WORKBENCH_PUBLIC = "/ui/public";
 
 }
index 928afd3a302836d28bf6d45b6ce8a3e0441b348f..3f926b6f783d30fc24c106185e9926a74284c3e8 100644 (file)
@@ -48,7 +48,7 @@ class NodeHttp implements KernelConstants, ArgeoJcrConstants {
        private String httpAuthRealm = "Argeo";
 
        // Filters
-       // private final RootFilter rootFilter;
+       private final EntryPointFilter entryPointFilter;
 
        // remoting
        private OpenInViewSessionProvider sessionProvider;
@@ -77,7 +77,7 @@ class NodeHttp implements KernelConstants, ArgeoJcrConstants {
                                        + ExtendedHttpService.class + " service.");
 
                // Filters
-               // rootFilter = new RootFilter();
+               entryPointFilter = new EntryPointFilter();
 
                // DAV
                sessionProvider = new OpenInViewSessionProvider();
@@ -98,7 +98,7 @@ class NodeHttp implements KernelConstants, ArgeoJcrConstants {
                        registerRemotingServlet(PATH_REMOTING_PRIVATE, ALIAS_NODE, false,
                                        privateRemotingServlet);
 
-                       // httpService.registerFilter("/", rootFilter, null, null);
+                       httpService.registerFilter("/", entryPointFilter, null, null);
                } catch (Exception e) {
                        throw new CmsException("Cannot publish HTTP services to OSGi", e);
                }
@@ -164,7 +164,7 @@ class NodeHttp implements KernelConstants, ArgeoJcrConstants {
                                        try {
                                                String credentials = new String(Base64.decodeBase64(st
                                                                .nextToken()), "UTF-8");
-                                               log.debug("Credentials: " + credentials);
+                                               // log.debug("Credentials: " + credentials);
                                                int p = credentials.indexOf(":");
                                                if (p != -1) {
                                                        String login = credentials.substring(0, p).trim();
@@ -172,7 +172,7 @@ class NodeHttp implements KernelConstants, ArgeoJcrConstants {
                                                                        .trim();
 
                                                        return new UsernamePasswordAuthenticationToken(
-                                                                       login, password);
+                                                                       login, password.toCharArray());
                                                } else {
                                                        throw new CmsException(
                                                                        "Invalid authentication token");
@@ -188,13 +188,28 @@ class NodeHttp implements KernelConstants, ArgeoJcrConstants {
        }
 
        /** Intercepts all requests. Authenticates. */
-       class RootFilter extends HttpFilter {
+       class EntryPointFilter extends HttpFilter {
 
                @Override
                public void doFilter(HttpSession httpSession,
                                HttpServletRequest request, HttpServletResponse response,
                                FilterChain filterChain) throws IOException, ServletException {
 
+                       if (request.getServletPath().startsWith(PATH_DATA)) {
+                               filterChain.doFilter(request, response);
+                               return;
+                       }
+
+                       String path = request.getRequestURI().substring(
+                                       request.getServletPath().length());
+
+                       if (!path.equals("")) {
+                               String newLocation = request.getServletPath() + "#" + path;
+                               response.setHeader("Location", newLocation);
+                               response.setStatus(HttpServletResponse.SC_FOUND);
+                               return;
+                       }
+
                        // Authenticate from session
                        if (isSessionAuthenticated(httpSession)) {
                                filterChain.doFilter(request, response);
@@ -260,10 +275,10 @@ class NodeHttp implements KernelConstants, ArgeoJcrConstants {
                                FilterChain filterChain) throws IOException, ServletException {
 
                        // Authenticate from session
-                       if (isSessionAuthenticated(httpSession)) {
-                               filterChain.doFilter(request, response);
-                               return;
-                       }
+                       // if (isSessionAuthenticated(httpSession)) {
+                       // filterChain.doFilter(request, response);
+                       // return;
+                       // }
 
                        // Process basic auth
                        String basicAuth = request.getHeader(HEADER_AUTHORIZATION);