QPID-8370: [Broker-J] Add option to disable web management console
diff --git a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java
index b92bbf6..987975f 100644
--- a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java
+++ b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java
@@ -347,6 +347,21 @@
root.addFilter(new FilterHolder(new ForbiddingTraceFilter()), "/*", EnumSet.of(DispatcherType.REQUEST));
+ addFiltersAndServletsForRest(root);
+ if (!Boolean.TRUE.equals(getContextValue(Boolean.class, DISABLE_UI_CONTEXT_NAME)))
+ {
+ addFiltersAndServletsForUserInterfaces(root);
+ }
+
+ root.getSessionHandler().getSessionCookieConfig().setName(JSESSIONID_COOKIE_PREFIX + lastPort);
+ root.getSessionHandler().getSessionCookieConfig().setHttpOnly(true);
+ root.getSessionHandler().setMaxInactiveInterval(getSessionTimeout());
+
+ return server;
+ }
+
+ private void addFiltersAndServletsForRest(final ServletContextHandler root)
+ {
FilterHolder loggingFilter = new FilterHolder(new LoggingFilter());
root.addFilter(loggingFilter, "/api/*", EnumSet.of(DispatcherType.REQUEST));
root.addFilter(loggingFilter, "/service/*", EnumSet.of(DispatcherType.REQUEST));
@@ -354,9 +369,27 @@
FilterHolder restAuthorizationFilter = new FilterHolder(new AuthenticationCheckFilter());
restAuthorizationFilter.setInitParameter(AuthenticationCheckFilter.INIT_PARAM_ALLOWED, "/service/sasl");
root.addFilter(restAuthorizationFilter, "/api/*", EnumSet.of(DispatcherType.REQUEST));
- root.addFilter(restAuthorizationFilter, "/apidocs/*", EnumSet.of(DispatcherType.REQUEST));
root.addFilter(restAuthorizationFilter, "/service/*", EnumSet.of(DispatcherType.REQUEST));
+ addRestServlet(root);
+
+ ServletHolder queryServlet = new ServletHolder(new BrokerQueryServlet());
+ root.addServlet(queryServlet, "/api/latest/querybroker/*");
+ root.addServlet(queryServlet, "/api/v" + BrokerModel.MODEL_VERSION + "/querybroker/*");
+
+ ServletHolder vhQueryServlet = new ServletHolder(new VirtualHostQueryServlet());
+ root.addServlet(vhQueryServlet, "/api/latest/queryvhost/*");
+ root.addServlet(vhQueryServlet, "/api/v" + BrokerModel.MODEL_VERSION + "/queryvhost/*");
+
+ root.addServlet(new ServletHolder(new StructureServlet()), "/service/structure");
+ root.addServlet(new ServletHolder(new QueueReportServlet()), "/service/queuereport/*");
+ root.addServlet(new ServletHolder(new MetaDataServlet()), "/service/metadata");
+ root.addServlet(new ServletHolder(new TimeZoneServlet()), "/service/timezones");
+ }
+
+ private void addFiltersAndServletsForUserInterfaces(final ServletContextHandler root)
+ {
+ root.addFilter(new FilterHolder(new AuthenticationCheckFilter()), "/apidocs/*", EnumSet.of(DispatcherType.REQUEST));
root.addFilter(new FilterHolder(new InteractiveAuthenticationFilter()), "/index.html", EnumSet.of(DispatcherType.REQUEST));
root.addFilter(new FilterHolder(new InteractiveAuthenticationFilter()), "/", EnumSet.of(DispatcherType.REQUEST));
@@ -370,53 +403,45 @@
root.addFilter(RewriteRequestForUncompressedJavascript.class, "/dojo/dojox/*", EnumSet.of(DispatcherType.REQUEST));
}
- addRestServlet(root);
-
- ServletHolder queryServlet = new ServletHolder(new BrokerQueryServlet());
- root.addServlet(queryServlet, "/api/latest/querybroker/*");
- root.addServlet(queryServlet, "/api/v" + BrokerModel.MODEL_VERSION + "/querybroker/*");
-
- ServletHolder vhQueryServlet = new ServletHolder(new VirtualHostQueryServlet());
- root.addServlet(vhQueryServlet, "/api/latest/queryvhost/*");
- root.addServlet(vhQueryServlet, "/api/v" + BrokerModel.MODEL_VERSION + "/queryvhost/*");
-
-
- ServletHolder apiDocsServlet = new ServletHolder(new ApiDocsServlet());
- final ServletHolder rewriteSerlvet = new ServletHolder(new RewriteServlet("^(.*)$", "$1/"));
- for(String path : new String[]{"/apidocs", "/apidocs/latest", "/apidocs/"+getLatestSupportedVersion()})
- {
- root.addServlet(rewriteSerlvet, path);
- root.addServlet(apiDocsServlet, path + "/");
- }
-
- root.addServlet(new ServletHolder(new StructureServlet()), "/service/structure");
- root.addServlet(new ServletHolder(new QueueReportServlet()), "/service/queuereport/*");
-
- root.addServlet(new ServletHolder(new MetaDataServlet()), "/service/metadata");
+ addApiDocsServlets(root);
root.addServlet(new ServletHolder(new SaslServlet()), "/service/sasl");
-
- root.addServlet(new ServletHolder(new RootServlet("/","/apidocs/","index.html")), "/");
+ root.addServlet(new ServletHolder(new RootServlet("/", "/apidocs/", "index.html")), "/");
root.addServlet(new ServletHolder(new LogoutServlet()), "/logout");
-
root.addServlet(new ServletHolder(new FileServlet(DojoHelper.getDojoPath(), true)), "/dojo/dojo/*");
root.addServlet(new ServletHolder(new FileServlet(DojoHelper.getDijitPath(), true)), "/dojo/dijit/*");
root.addServlet(new ServletHolder(new FileServlet(DojoHelper.getDojoxPath(), true)), "/dojo/dojox/*");
root.addServlet(new ServletHolder(new FileServlet(DojoHelper.getDgridPath(), true)), "/dojo/dgrid/*");
root.addServlet(new ServletHolder(new FileServlet(DojoHelper.getDstorePath(), true)), "/dojo/dstore/*");
- for(String pattern : STATIC_FILE_TYPES)
+ for (String pattern : STATIC_FILE_TYPES)
{
root.addServlet(new ServletHolder(new FileServlet()), pattern);
}
+ }
- root.addServlet(new ServletHolder(new TimeZoneServlet()), "/service/timezones");
+ private void addApiDocsServlets(final ServletContextHandler root)
+ {
+ final ApiDocsServlet apiDocsServlet = new ApiDocsServlet();
+ final ServletHolder apiDocsServletHolder = new ServletHolder(apiDocsServlet);
+ final ServletHolder rewriteSerlvet = new ServletHolder(new RewriteServlet("^(.*)$", "$1/"));
+ final String version = getLatestSupportedVersion();
+ for (String path : new String[]{"/apidocs", "/apidocs/latest", "/apidocs/v" + version})
+ {
+ root.addServlet(rewriteSerlvet, path);
+ root.addServlet(apiDocsServletHolder, path + "/");
+ }
- root.getSessionHandler().getSessionCookieConfig().setName(JSESSIONID_COOKIE_PREFIX + lastPort);
- root.getSessionHandler().getSessionCookieConfig().setHttpOnly(true);
- root.getSessionHandler().setMaxInactiveInterval(getSessionTimeout());
-
- return server;
+ getModel().getSupportedCategories()
+ .stream()
+ .map(Class::getSimpleName)
+ .map(String::toLowerCase)
+ .forEach(name -> {
+ root.addServlet(apiDocsServletHolder, "/apidocs/latest/" + name + "/");
+ root.addServlet(apiDocsServletHolder, "/apidocs/" + version + "/" + name + "/");
+ root.addServlet(apiDocsServletHolder, "/apidocs/latest/" + name);
+ root.addServlet(apiDocsServletHolder, "/apidocs/" + version + "/" + name);
+ });
}
@Override
@@ -711,8 +736,10 @@
private void addRestServlet(final ServletContextHandler root)
{
final Map<String, ManagementControllerFactory> factories = ManagementControllerFactory.loadFactories();
- final ApiDocsServlet apiDocsServlet = new ApiDocsServlet();
+ final long maxFileSize = getContextValue(Long.class, MAX_HTTP_FILE_UPLOAD_SIZE_CONTEXT_NAME);
+ final int maxRequestSize = getContextValue(Integer.class, MAX_HTTP_FILE_UPLOAD_SIZE_CONTEXT_NAME);
final List<String> supportedVersions = new ArrayList<>();
+ supportedVersions.add("latest");
String currentVersion = BrokerModel.MODEL_VERSION;
ManagementController managementController = null;
ManagementControllerFactory factory;
@@ -732,23 +759,13 @@
servletHolder.setInitParameter("qpid.controller.version", managementController.getVersion());
servletHolder.getRegistration().setMultipartConfig(
- new MultipartConfigElement("",
- getContextValue(Long.class,
- MAX_HTTP_FILE_UPLOAD_SIZE_CONTEXT_NAME),
- -1L,
- getContextValue(Integer.class,
- MAX_HTTP_FILE_UPLOAD_SIZE_CONTEXT_NAME)));
+ new MultipartConfigElement("", maxFileSize, -1L, maxRequestSize));
root.addServlet(servletHolder, path + (path.endsWith("/") ? "*" : "/*"));
if (BrokerModel.MODEL_VERSION.equals(managementController.getVersion()))
{
root.addServlet(servletHolder, "/api/latest/" + name + "/*");
- ServletHolder docServletHolder = new ServletHolder(name + "docs", apiDocsServlet);
- root.addServlet(docServletHolder, "/apidocs/latest/" + name + "/");
- root.addServlet(docServletHolder, "/apidocs/v" + BrokerModel.MODEL_VERSION + "/" + name + "/");
- root.addServlet(docServletHolder, "/apidocs/latest/" + name);
- root.addServlet(docServletHolder, "/apidocs/v" + BrokerModel.MODEL_VERSION + "/" + name);
}
}
supportedVersions.add("v" + currentVersion);
diff --git a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementConfiguration.java b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementConfiguration.java
index a5aadae..85f0606 100644
--- a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementConfiguration.java
+++ b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementConfiguration.java
@@ -85,6 +85,11 @@
@ManagedContextDefault( name = SASL_EXCHANGE_EXPIRY_CONTEXT_NAME)
long DEFAULT_SASL_EXCHANGE_EXPIRY = 60000L;
+ String DISABLE_UI_CONTEXT_NAME = "qpid.httpManagement.disableUserInterface";
+ @SuppressWarnings("unused")
+ @ManagedContextDefault( name = DISABLE_UI_CONTEXT_NAME)
+ boolean DEFAULT_DISABLE_UI = false;
+
AuthenticationProvider getAuthenticationProvider(HttpServletRequest request);
Port<?> getPort(HttpServletRequest request);
}
diff --git a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/controller/latest/LatestManagementController.java b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/controller/latest/LatestManagementController.java
index eaf5075..0c65c2c 100644
--- a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/controller/latest/LatestManagementController.java
+++ b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/controller/latest/LatestManagementController.java
@@ -111,11 +111,11 @@
_userPreferenceHandler = new RestUserPreferenceHandler(preferenceOperationTimeout == null
? DEFAULT_PREFERENCE_OPERATION_TIMEOUT
: preferenceOperationTimeout);
- _supportedCategories = Collections.unmodifiableSet(BrokerModel.getInstance()
- .getSupportedCategories()
- .stream()
- .map(Class::getSimpleName)
- .collect(Collectors.toSet()));
+ _supportedCategories = Collections.unmodifiableSet(httpManagement.getModel()
+ .getSupportedCategories()
+ .stream()
+ .map(Class::getSimpleName)
+ .collect(Collectors.toSet()));
}
@Override
diff --git a/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/controller/latest/LatestManagementControllerAdapterTest.java b/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/controller/latest/LatestManagementControllerAdapterTest.java
index 5718e22..67f0859 100644
--- a/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/controller/latest/LatestManagementControllerAdapterTest.java
+++ b/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/controller/latest/LatestManagementControllerAdapterTest.java
@@ -67,8 +67,8 @@
{
final HttpManagementConfiguration<?> httpManagement = mock(HttpManagementConfiguration.class);
when(httpManagement.getContextValue(Long.class, PREFERENCE_OPERTAION_TIMEOUT_CONTEXT_NAME)).thenReturn(1000L);
+ when(httpManagement.getModel()).thenReturn(BrokerModel.getInstance());
final ManagementController managementController = new LatestManagementController(httpManagement);
- when(managementController.getVersion()).thenReturn(BrokerModel.MODEL_VERSION);
_adapter = new LatestManagementControllerAdapter(managementController);
}
diff --git a/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/controller/latest/LatestManagementControllerTest.java b/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/controller/latest/LatestManagementControllerTest.java
index 0a32b9e..97c94e5 100644
--- a/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/controller/latest/LatestManagementControllerTest.java
+++ b/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/controller/latest/LatestManagementControllerTest.java
@@ -82,6 +82,7 @@
{
final HttpManagementConfiguration<?> httpManagement = mock(HttpManagementConfiguration.class);
when(httpManagement.getContextValue(Long.class, PREFERENCE_OPERTAION_TIMEOUT_CONTEXT_NAME)).thenReturn(1000L);
+ when(httpManagement.getModel()).thenReturn(BrokerModel.getInstance());
_controller = new LatestManagementController(httpManagement);
}