This is an automated email from the ASF dual-hosted git repository.

cziegeler pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/felix-dev.git


The following commit(s) were added to refs/heads/master by this push:
     new a981dbde30 FELIX-6623 : Use Http Whiteboard for Web Console 
registration
a981dbde30 is described below

commit a981dbde303dc9ce2202e03b467658c3e3698dcc
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Mon Aug 14 13:52:52 2023 +0200

    FELIX-6623 : Use Http Whiteboard for Web Console registration
---
 .../webconsole/internal/servlet/OsgiManager.java   | 56 ++--------------------
 .../internal/servlet/OsgiManagerHttpContext.java   | 12 +++++
 2 files changed, 15 insertions(+), 53 deletions(-)

diff --git 
a/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManager.java
 
b/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManager.java
index d7426e9ed3..b898fd7bab 100644
--- 
a/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManager.java
+++ 
b/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManager.java
@@ -17,10 +17,7 @@
 package org.apache.felix.webconsole.internal.servlet;
 
 import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
 import java.net.URL;
-import java.net.URLConnection;
 import java.security.AccessController;
 import java.security.PrivilegedActionException;
 import java.security.PrivilegedExceptionAction;
@@ -584,16 +581,6 @@ public class OsgiManager extends GenericServlet {
             return;
         }
 
-        if (pathInfo.startsWith("/res/")) {
-            URL url = this.getBundleContext().getBundle().getResource( 
pathInfo );
-            if ( url == null && pathInfo.endsWith( "/" ) ) {
-                url = this.getBundleContext().getBundle().getResource( 
pathInfo.substring( 0, pathInfo.length() - 1 ) );
-            }
-            if ( url != null && this.spool(request, response, url)) {
-                return;
-            }
-        }
-
         int slash = pathInfo.indexOf("/", 1); //$NON-NLS-1$
         if (slash < 2)
         {
@@ -648,46 +635,6 @@ public class OsgiManager extends GenericServlet {
         plugin.service(request, response);
     }
 
-    private boolean spool(final HttpServletRequest request, final 
HttpServletResponse response, final URL url) 
-    throws IOException {
-        final URLConnection connection = url.openConnection();
-        try ( InputStream ins = connection.getInputStream()) {
-            if (ins == null) {
-                return false;
-            }
-
-            // check whether we may return 304/UNMODIFIED
-            final long lastModified = connection.getLastModified();
-            if ( lastModified > 0 ) {
-                final long ifModifiedSince = request.getDateHeader( 
"If-Modified-Since" );
-                if ( ifModifiedSince >= ( lastModified / 1000 * 1000 ) ) {
-                    // Round down to the nearest second for a proper compare
-                    // A ifModifiedSince of -1 will always be less
-                    response.setStatus( HttpServletResponse.SC_NOT_MODIFIED );
-
-                    return true;
-                }
-
-                // have to send, so set the last modified header now
-                response.setDateHeader( "Last-Modified", lastModified );
-            }
-
-            response.setContentType( getServletContext().getMimeType( 
request.getPathInfo() ) );
-            response.setIntHeader( "Content-Length", 
connection.getContentLength() );
-
-            // spool the actual contents
-            try (final OutputStream out = response.getOutputStream()) {
-                byte[] buf = new byte[2048];
-                int rd;
-                while ( ( rd = ins.read( buf ) ) >= 0 ) {
-                    out.write( buf, 0, rd );
-                }
-            }
-
-            return true;
-        }
-    }
-
     private final void logout(HttpServletRequest request, HttpServletResponse 
response)
         throws IOException {
         final Object securityProvider = securityProviderTracker.getService();
@@ -990,6 +937,9 @@ public class OsgiManager extends GenericServlet {
                 
props.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_PATTERN, "/");
                 
props.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_SELECT, "(" + 
HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_NAME + "=" + 
SERVLEXT_CONTEXT_NAME + ")");
 
+                
props.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_RESOURCE_PATTERN, "/res/*");
+                
props.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_RESOURCE_PREFIX, "/res");
+
                 this.servletRegistration = 
getBundleContext().registerService(Servlet.class, this, props);                
             }
         } catch (final Exception e) {
diff --git 
a/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManagerHttpContext.java
 
b/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManagerHttpContext.java
index e206756945..dfd430c7c8 100644
--- 
a/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManagerHttpContext.java
+++ 
b/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManagerHttpContext.java
@@ -22,6 +22,7 @@ import static 
org.apache.felix.webconsole.internal.servlet.BasicWebConsoleSecuri
 import static 
org.apache.felix.webconsole.internal.servlet.BasicWebConsoleSecurityProvider.HEADER_WWW_AUTHENTICATE;
 
 import java.io.IOException;
+import java.net.URL;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequestWrapper;
@@ -41,12 +42,23 @@ final class OsgiManagerHttpContext extends 
ServletContextHelper {
 
     private final String realm;
 
+    private final Bundle bundle;
+
     OsgiManagerHttpContext(final Bundle webConsoleBundle,
             final ServiceTracker<WebConsoleSecurityProvider, 
WebConsoleSecurityProvider> tracker,
             final String realm) {
         super(webConsoleBundle);
         this.tracker = tracker;
         this.realm = realm;
+        this.bundle = webConsoleBundle;
+    }
+
+    public URL getResource(final String name) {
+        URL url = this.bundle.getResource( name );
+        if ( url == null && name.endsWith( "/" ) ) {
+            url = this.bundle.getResource( name.substring( 0, name.length() - 
1 ) );
+        }
+        return url;
     }
 
     @Override

Reply via email to