From: Mathieu Baudier Date: Thu, 12 Feb 2015 15:03:40 +0000 (+0000) Subject: Redirect path to entry points X-Git-Tag: argeo-commons-2.1.30~389 X-Git-Url: https://git.argeo.org/?a=commitdiff_plain;h=e8146961fe88fff7240f560885ccba809c338e0b;p=lgpl%2Fargeo-commons.git Redirect path to entry points git-svn-id: https://svn.argeo.org/commons/trunk@7819 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/HttpFilter.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/HttpFilter.java index 7c2151ebb..a98f885b0 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/HttpFilter.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/HttpFilter.java @@ -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 en = request.getHeaderNames(); + while (en.hasMoreElements()) { + String header = en.nextElement(); + Enumeration 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); } diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/KernelConstants.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/KernelConstants.java index 1c6f8f020..eab67785e 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/KernelConstants.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/KernelConstants.java @@ -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"; } diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeHttp.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeHttp.java index 928afd3a3..3f926b6f7 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeHttp.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeHttp.java @@ -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);