From c7e195eb2bad923662e6aa116359ca473dee337f Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Fri, 16 Oct 2020 10:52:07 +0200 Subject: [PATCH] Expose servlet context helpers. --- org.argeo.cms/OSGI-INF/dataServletContext.xml | 2 +- org.argeo.cms/OSGI-INF/filesServletContext.xml | 2 +- org.argeo.cms/OSGI-INF/jcrServletContext.xml | 2 +- .../src/org/argeo/cms/internal/http/HttpUtils.java | 13 +++++++++++-- .../CmsServletContext.java} | 9 ++++++--- .../PrivateWwwAuthServletContext.java} | 11 ++++++----- 6 files changed, 26 insertions(+), 13 deletions(-) rename org.argeo.cms/src/org/argeo/cms/{internal/http/CmsServletContextHelper.java => servlet/CmsServletContext.java} (89%) rename org.argeo.cms/src/org/argeo/cms/{internal/http/PrivateServletContextHelper.java => servlet/PrivateWwwAuthServletContext.java} (86%) diff --git a/org.argeo.cms/OSGI-INF/dataServletContext.xml b/org.argeo.cms/OSGI-INF/dataServletContext.xml index 1c31adbbd..ffd8804b5 100644 --- a/org.argeo.cms/OSGI-INF/dataServletContext.xml +++ b/org.argeo.cms/OSGI-INF/dataServletContext.xml @@ -1,6 +1,6 @@ - + diff --git a/org.argeo.cms/OSGI-INF/filesServletContext.xml b/org.argeo.cms/OSGI-INF/filesServletContext.xml index a9993a355..049270c6a 100644 --- a/org.argeo.cms/OSGI-INF/filesServletContext.xml +++ b/org.argeo.cms/OSGI-INF/filesServletContext.xml @@ -1,6 +1,6 @@ - + diff --git a/org.argeo.cms/OSGI-INF/jcrServletContext.xml b/org.argeo.cms/OSGI-INF/jcrServletContext.xml index fb6f79e30..dd83c1d1c 100644 --- a/org.argeo.cms/OSGI-INF/jcrServletContext.xml +++ b/org.argeo.cms/OSGI-INF/jcrServletContext.xml @@ -1,6 +1,6 @@ - + diff --git a/org.argeo.cms/src/org/argeo/cms/internal/http/HttpUtils.java b/org.argeo.cms/src/org/argeo/cms/internal/http/HttpUtils.java index 58d9324ec..70998ea1a 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/http/HttpUtils.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/http/HttpUtils.java @@ -3,6 +3,7 @@ package org.argeo.cms.internal.http; import java.util.Enumeration; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; @@ -19,6 +20,15 @@ public class HttpUtils { || userAgent.contains("opera") || userAgent.contains("browser"); } + public static void logResponseHeaders(Log log, HttpServletResponse response) { + if (!log.isDebugEnabled()) + return; + for (String headerName : response.getHeaderNames()) { + Object headerValue = response.getHeader(headerName); + log.debug(headerName + ": " + headerValue); + } + } + public static void logRequestHeaders(Log log, HttpServletRequest request) { if (!log.isDebugEnabled()) return; @@ -30,7 +40,7 @@ public class HttpUtils { log.debug(request.getRequestURI() + "\n"); } - public static void logRequest(Log log,HttpServletRequest request) { + public static void logRequest(Log log, HttpServletRequest request) { log.debug("contextPath=" + request.getContextPath()); log.debug("servletPath=" + request.getServletPath()); log.debug("requestURI=" + request.getRequestURI()); @@ -57,7 +67,6 @@ public class HttpUtils { log.debug("\n" + buf); } - private HttpUtils() { } diff --git a/org.argeo.cms/src/org/argeo/cms/internal/http/CmsServletContextHelper.java b/org.argeo.cms/src/org/argeo/cms/servlet/CmsServletContext.java similarity index 89% rename from org.argeo.cms/src/org/argeo/cms/internal/http/CmsServletContextHelper.java rename to org.argeo.cms/src/org/argeo/cms/servlet/CmsServletContext.java index e2fd3d98f..03a7551f0 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/http/CmsServletContextHelper.java +++ b/org.argeo.cms/src/org/argeo/cms/servlet/CmsServletContext.java @@ -1,4 +1,4 @@ -package org.argeo.cms.internal.http; +package org.argeo.cms.servlet; import java.io.IOException; import java.net.URL; @@ -13,6 +13,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.argeo.api.NodeConstants; import org.argeo.cms.auth.HttpRequestCallbackHandler; +import org.argeo.cms.internal.http.HttpUtils; import org.osgi.framework.Bundle; import org.osgi.framework.FrameworkUtil; import org.osgi.service.http.context.ServletContextHelper; @@ -21,8 +22,8 @@ import org.osgi.service.http.context.ServletContextHelper; * Default servlet context degrading to anonymous if the the sesison is not * pre-authenticated. */ -public class CmsServletContextHelper extends ServletContextHelper { - private final static Log log = LogFactory.getLog(CmsServletContextHelper.class); +public class CmsServletContext extends ServletContextHelper { + private final static Log log = LogFactory.getLog(CmsServletContext.class); // use CMS bundle for resources private Bundle bundle = FrameworkUtil.getBundle(getClass()); @@ -44,6 +45,8 @@ public class CmsServletContextHelper extends ServletContextHelper { lc.login(); } catch (LoginException e) { lc = processUnauthorized(request, response); + if (log.isTraceEnabled()) + HttpUtils.logResponseHeaders(log, response); if (lc == null) return false; } diff --git a/org.argeo.cms/src/org/argeo/cms/internal/http/PrivateServletContextHelper.java b/org.argeo.cms/src/org/argeo/cms/servlet/PrivateWwwAuthServletContext.java similarity index 86% rename from org.argeo.cms/src/org/argeo/cms/internal/http/PrivateServletContextHelper.java rename to org.argeo.cms/src/org/argeo/cms/servlet/PrivateWwwAuthServletContext.java index b5dc7ba6f..e4547507a 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/http/PrivateServletContextHelper.java +++ b/org.argeo.cms/src/org/argeo/cms/servlet/PrivateWwwAuthServletContext.java @@ -1,11 +1,13 @@ -package org.argeo.cms.internal.http; +package org.argeo.cms.servlet; import javax.security.auth.login.LoginContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.argeo.cms.internal.http.HttpUtils; + /** Servlet context forcing authentication. */ -public class PrivateServletContextHelper extends CmsServletContextHelper { +public class PrivateWwwAuthServletContext extends CmsServletContext { // TODO make it configurable private final String httpAuthRealm = "Argeo"; private final boolean forceBasic = false; @@ -17,7 +19,6 @@ public class PrivateServletContextHelper extends CmsServletContextHelper { } protected void askForWwwAuth(HttpServletRequest request, HttpServletResponse response) { - response.setStatus(401); // response.setHeader(HttpUtils.HEADER_WWW_AUTHENTICATE, "basic // realm=\"" + httpAuthRealm + "\""); if (org.argeo.cms.internal.kernel.Activator.getAcceptorCredentials() != null && !forceBasic)// SPNEGO @@ -31,7 +32,7 @@ public class PrivateServletContextHelper extends CmsServletContextHelper { // response.setHeader("Accept-Ranges", "bytes"); // response.setHeader("Connection", "Keep-Alive"); // response.setHeader("Keep-Alive", "timeout=5, max=97"); - // response.setContentType("text/html; charset=UTF-8"); - + // response.setContentType("text/html; charset=UTF-8"); + response.setStatus(401); } } -- 2.30.2