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