Fix various issues raised when adapting upper layers
authorMathieu Baudier <mbaudier@argeo.org>
Wed, 5 Jan 2022 09:10:35 +0000 (10:10 +0100)
committerMathieu Baudier <mbaudier@argeo.org>
Wed, 5 Jan 2022 09:10:35 +0000 (10:10 +0100)
dep/pom.xml
dist/argeo-init/pom.xml
org.argeo.cms.servlet/src/org/argeo/cms/servlet/CmsServletContext.java
org.argeo.cms.servlet/src/org/argeo/cms/servlet/ServletAuthUtils.java
org.argeo.cms.servlet/src/org/argeo/cms/servlet/ServletHttpRequest.java
org.argeo.cms.servlet/src/org/argeo/cms/servlet/ServletHttpSession.java [new file with mode: 0644]

index afbc3ea58271e4227537543bf8568aeea00a82fc..bc9065c243b0e0ea42d0b021a2eea067a4cf7608 100644 (file)
                        <dependencies>
                                <dependency>
                                        <groupId>org.argeo.commons</groupId>
-                                       <artifactId>org.argeo.osgi.boot</artifactId>
+                                       <artifactId>org.argeo.init</artifactId>
                                        <version>2.3-SNAPSHOT</version>
                                        <scope>test</scope>
                                </dependency>
index 39f3dd3ede3f899362cded1c75eb147ee90de1dd..5aeaa5e074f29d8da4df258fd8528f64e55dba6b 100644 (file)
@@ -95,7 +95,7 @@
                                                                                        <dependency>
                                                                                                <stripVersion>true</stripVersion>
                                                                                                <includes>
-                                                                                                       <include>org.argeo.commons:org.argeo.osgi.boot</include>
+                                                                                                       <include>org.argeo.commons:org.argeo.init</include>
                                                                                                </includes>
                                                                                        </dependency>
                                                                                </mapping>
index ff341a25ae10147b7f95a05712a0c27a2c17eacd..a5ba6ef82be5ed3658fd9f2572fd995f6ff579ff 100644 (file)
@@ -61,7 +61,7 @@ public class CmsServletContext extends ServletContextHelper {
                        @Override
                        public Void run() {
                                // TODO also set login context in order to log out ?
-                               ServletAuthUtils.configureRequestSecurity(request);
+                               ServletAuthUtils.configureRequestSecurity(new ServletHttpRequest(request));
                                return null;
                        }
 
@@ -71,7 +71,7 @@ public class CmsServletContext extends ServletContextHelper {
 
        @Override
        public void finishSecurity(HttpServletRequest request, HttpServletResponse response) {
-               ServletAuthUtils.clearRequestSecurity(request);
+               ServletAuthUtils.clearRequestSecurity(new ServletHttpRequest(request));
        }
 
        protected LoginContext processUnauthorized(HttpServletRequest request, HttpServletResponse response) {
index 67db467ce25a62f19a5aec82821e0e4d41efd729..7719658d706df89320689a672a9b60354d69e938 100644 (file)
@@ -6,24 +6,24 @@ import java.security.PrivilegedAction;
 import java.util.function.Supplier;
 
 import javax.security.auth.Subject;
-import javax.servlet.http.HttpServletRequest;
 
 import org.argeo.api.cms.CmsSession;
 import org.argeo.cms.auth.CurrentUser;
+import org.argeo.cms.auth.HttpRequest;
 import org.argeo.cms.osgi.CmsOsgiUtils;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.FrameworkUtil;
-import org.osgi.service.http.HttpContext;
 
 /** Authentications utilities when using servlets. */
 public class ServletAuthUtils {
+       static final String REMOTE_USER = "org.osgi.service.http.authentication.remote.user";
        private static BundleContext bundleContext = FrameworkUtil.getBundle(ServletAuthUtils.class).getBundleContext();
 
        /**
         * Execute this supplier, using the CMS class loader as context classloader.
         * Useful to log in to JCR.
         */
-       public final static <T> T doAs(Supplier<T> supplier, HttpServletRequest req) {
+       public final static <T> T doAs(Supplier<T> supplier, HttpRequest req) {
                ClassLoader currentContextCl = Thread.currentThread().getContextClassLoader();
                Thread.currentThread().setContextClassLoader(ServletAuthUtils.class.getClassLoader());
                try {
@@ -42,22 +42,22 @@ public class ServletAuthUtils {
                }
        }
 
-       public final static void configureRequestSecurity(HttpServletRequest req) {
+       public final static void configureRequestSecurity(HttpRequest req) {
                if (req.getAttribute(AccessControlContext.class.getName()) != null)
                        throw new IllegalStateException("Request already authenticated.");
                AccessControlContext acc = AccessController.getContext();
-               req.setAttribute(HttpContext.REMOTE_USER, CurrentUser.getUsername());
+               req.setAttribute(REMOTE_USER, CurrentUser.getUsername());
                req.setAttribute(AccessControlContext.class.getName(), acc);
        }
 
-       public final static void clearRequestSecurity(HttpServletRequest req) {
+       public final static void clearRequestSecurity(HttpRequest req) {
                if (req.getAttribute(AccessControlContext.class.getName()) == null)
                        throw new IllegalStateException("Cannot clear non-authenticated request.");
-               req.setAttribute(HttpContext.REMOTE_USER, null);
+               req.setAttribute(REMOTE_USER, null);
                req.setAttribute(AccessControlContext.class.getName(), null);
        }
 
-       public static CmsSession getCmsSession(HttpServletRequest req) {
+       public static CmsSession getCmsSession(HttpRequest req) {
                Subject subject = Subject
                                .getSubject((AccessControlContext) req.getAttribute(AccessControlContext.class.getName()));
                CmsSession cmsSession = CmsOsgiUtils.getCmsSession(bundleContext, subject);
index 523f7b75786bbdd6b3397818745cb3672458ac21..75a0d8782c7bca2266ae76b6e010edc3825ed634 100644 (file)
@@ -18,13 +18,12 @@ public class ServletHttpRequest implements HttpRequest {
 
        @Override
        public HttpSession getSession() {
-               return new ServletHttpSession();
+               return new ServletHttpSession(request.getSession(false));
        }
 
        @Override
        public HttpSession createSession() {
-               request.getSession(true);
-               return new ServletHttpSession();
+               return new ServletHttpSession(request.getSession(true));
        }
 
        @Override
@@ -61,23 +60,4 @@ public class ServletHttpRequest implements HttpRequest {
        public int getRemotePort() {
                return request.getRemotePort();
        }
-
-       private class ServletHttpSession implements HttpSession {
-
-               @Override
-               public boolean isValid() {
-                       try {// test http session
-                               request.getSession(false).getCreationTime();
-                               return true;
-                       } catch (IllegalStateException ise) {
-                               return false;
-                       }
-               }
-
-               @Override
-               public String getId() {
-                       return request.getSession(false).getId();
-               }
-
-       }
 }
diff --git a/org.argeo.cms.servlet/src/org/argeo/cms/servlet/ServletHttpSession.java b/org.argeo.cms.servlet/src/org/argeo/cms/servlet/ServletHttpSession.java
new file mode 100644 (file)
index 0000000..1653764
--- /dev/null
@@ -0,0 +1,28 @@
+package org.argeo.cms.servlet;
+
+import org.argeo.cms.auth.HttpSession;
+
+public class ServletHttpSession implements HttpSession {
+       private javax.servlet.http.HttpSession session;
+
+       public ServletHttpSession(javax.servlet.http.HttpSession session) {
+               super();
+               this.session = session;
+       }
+
+       @Override
+       public boolean isValid() {
+               try {// test http session
+                       session.getCreationTime();
+                       return true;
+               } catch (IllegalStateException ise) {
+                       return false;
+               }
+       }
+
+       @Override
+       public String getId() {
+               return session.getId();
+       }
+
+}