This is an automated email from the ASF dual-hosted git repository. orudyy pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/qpid-broker-j.git
The following commit(s) were added to refs/heads/master by this push: new 8857187 QPID-8370: [Broker-J] Add option to disable web management console 8857187 is described below commit 8857187fdf17479c8e1809ccd63a3c4a0cd4a794 Author: Alex Rudyy <oru...@apache.org> AuthorDate: Fri Feb 28 16:15:09 2020 +0000 QPID-8370: [Broker-J] Add option to disable web management console --- .../server/management/plugin/HttpManagement.java | 107 ++++++++++++--------- .../plugin/HttpManagementConfiguration.java | 5 + .../latest/LatestManagementController.java | 10 +- .../LatestManagementControllerAdapterTest.java | 2 +- .../latest/LatestManagementControllerTest.java | 1 + 5 files changed, 74 insertions(+), 51 deletions(-) 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 @@ public class HttpManagement extends AbstractPluginAdapter<HttpManagement> implem 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,22 +369,8 @@ public class HttpManagement extends AbstractPluginAdapter<HttpManagement> implem 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)); - root.addFilter(new FilterHolder(new InteractiveAuthenticationFilter()), "/index.html", EnumSet.of(DispatcherType.REQUEST)); - root.addFilter(new FilterHolder(new InteractiveAuthenticationFilter()), "/", EnumSet.of(DispatcherType.REQUEST)); - - FilterHolder redirectFilter = new FilterHolder(new RedirectFilter()); - redirectFilter.setInitParameter(RedirectFilter.INIT_PARAM_REDIRECT_URI, "/index.html"); - root.addFilter(redirectFilter, "/login.html", EnumSet.of(DispatcherType.REQUEST)); - - if (_serveUncompressedDojo) - { - root.addFilter(RewriteRequestForUncompressedJavascript.class, "/dojo/dojo/*", EnumSet.of(DispatcherType.REQUEST)); - root.addFilter(RewriteRequestForUncompressedJavascript.class, "/dojo/dojox/*", EnumSet.of(DispatcherType.REQUEST)); - } - addRestServlet(root); ServletHolder queryServlet = new ServletHolder(new BrokerQueryServlet()); @@ -380,43 +381,67 @@ public class HttpManagement extends AbstractPluginAdapter<HttpManagement> implem 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"); + } - ServletHolder apiDocsServlet = new ServletHolder(new ApiDocsServlet()); - final ServletHolder rewriteSerlvet = new ServletHolder(new RewriteServlet("^(.*)$", "$1/")); - for(String path : new String[]{"/apidocs", "/apidocs/latest", "/apidocs/"+getLatestSupportedVersion()}) + 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)); + + FilterHolder redirectFilter = new FilterHolder(new RedirectFilter()); + redirectFilter.setInitParameter(RedirectFilter.INIT_PARAM_REDIRECT_URI, "/index.html"); + root.addFilter(redirectFilter, "/login.html", EnumSet.of(DispatcherType.REQUEST)); + + if (_serveUncompressedDojo) { - root.addServlet(rewriteSerlvet, path); - root.addServlet(apiDocsServlet, path + "/"); + root.addFilter(RewriteRequestForUncompressedJavascript.class, "/dojo/dojo/*", EnumSet.of(DispatcherType.REQUEST)); + root.addFilter(RewriteRequestForUncompressedJavascript.class, "/dojo/dojox/*", EnumSet.of(DispatcherType.REQUEST)); } - 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"); - - root.getSessionHandler().getSessionCookieConfig().setName(JSESSIONID_COOKIE_PREFIX + lastPort); - root.getSessionHandler().getSessionCookieConfig().setHttpOnly(true); - root.getSessionHandler().setMaxInactiveInterval(getSessionTimeout()); + 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 + "/"); + } - 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 @@ public class HttpManagement extends AbstractPluginAdapter<HttpManagement> implem 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 @@ public class HttpManagement extends AbstractPluginAdapter<HttpManagement> implem 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 @@ public interface HttpManagementConfiguration<X extends HttpManagementConfigurati @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 @@ public class LatestManagementController extends AbstractManagementController _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 @@ public class LatestManagementControllerAdapterTest extends UnitTestBase { 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 @@ public class LatestManagementControllerTest extends UnitTestBase { 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); } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org