use of org.apache.storm.daemon.ui.filters.HeaderResponseServletFilter in project storm by apache.
the class UIServer method main.
/**
* main.
* @param args args
*/
public static void main(String[] args) {
Map<String, Object> conf = ConfigUtils.readStormConfig();
int headerBufferSize = (int) conf.get(DaemonConfig.UI_HEADER_BUFFER_BYTES);
final Integer httpsPort = ObjectReader.getInt(conf.get(DaemonConfig.UI_HTTPS_PORT), 0);
final String httpsKsPath = (String) (conf.get(DaemonConfig.UI_HTTPS_KEYSTORE_PATH));
final String httpsKsPassword = (String) (conf.get(DaemonConfig.UI_HTTPS_KEYSTORE_PASSWORD));
final String httpsKsType = (String) (conf.get(DaemonConfig.UI_HTTPS_KEYSTORE_TYPE));
final String httpsKeyPassword = (String) (conf.get(DaemonConfig.UI_HTTPS_KEY_PASSWORD));
final String httpsTsPath = (String) (conf.get(DaemonConfig.UI_HTTPS_TRUSTSTORE_PATH));
final String httpsTsPassword = (String) (conf.get(DaemonConfig.UI_HTTPS_TRUSTSTORE_PASSWORD));
final String httpsTsType = (String) (conf.get(DaemonConfig.UI_HTTPS_TRUSTSTORE_TYPE));
final Boolean httpsWantClientAuth = (Boolean) (conf.get(DaemonConfig.UI_HTTPS_WANT_CLIENT_AUTH));
final Boolean httpsNeedClientAuth = (Boolean) (conf.get(DaemonConfig.UI_HTTPS_NEED_CLIENT_AUTH));
final Boolean disableHttpBinding = (Boolean) (conf.get(DaemonConfig.UI_DISABLE_HTTP_BINDING));
final boolean enableSslReload = ObjectReader.getBoolean(conf.get(DaemonConfig.UI_HTTPS_ENABLE_SSL_RELOAD), false);
Server jettyServer = UIHelpers.jettyCreateServer((int) conf.get(DaemonConfig.UI_PORT), null, httpsPort, headerBufferSize, disableHttpBinding);
UIHelpers.configSsl(jettyServer, httpsPort, httpsKsPath, httpsKsPassword, httpsKsType, httpsKeyPassword, httpsTsPath, httpsTsPassword, httpsTsType, httpsNeedClientAuth, httpsWantClientAuth, enableSslReload);
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
jettyServer.setHandler(context);
FilterConfiguration filterConfiguration = new FilterConfiguration((String) conf.get(DaemonConfig.UI_FILTER), (Map<String, String>) conf.get(DaemonConfig.UI_FILTER_PARAMS));
final List<FilterConfiguration> filterConfigurationList = Arrays.asList(filterConfiguration);
UIHelpers.configFilters(context, filterConfigurationList);
StormMetricsRegistry metricsRegistry = new StormMetricsRegistry();
ResourceConfig resourceConfig = new ResourceConfig().packages("org.apache.storm.daemon.ui.resources").registerInstances(new AbstractBinder() {
@Override
protected void configure() {
super.bind(metricsRegistry).to(StormMetricsRegistry.class);
}
}).register(AuthorizedUserFilter.class).register(HeaderResponseFilter.class).register(AuthorizationExceptionMapper.class).register(NotAliveExceptionMapper.class).register(DefaultExceptionMapper.class);
ServletHolder jerseyServlet = new ServletHolder(new ServletContainer(resourceConfig));
jerseyServlet.setInitOrder(0);
context.addServlet(jerseyServlet, STORM_API_URL_PREFIX + "*");
addRequestContextFilter(context, DaemonConfig.UI_HTTP_CREDS_PLUGIN, conf);
// add special pathspec of static content mapped to the homePath
ServletHolder holderHome = new ServletHolder("static-home", DefaultServlet.class);
String packagedStaticFileLocation = System.getProperty(STORM_HOME) + FILE_SEPARATOR + "public/";
if (Files.exists(Paths.get(packagedStaticFileLocation))) {
holderHome.setInitParameter("resourceBase", packagedStaticFileLocation);
} else {
LOG.warn("Cannot find static file directory in " + packagedStaticFileLocation + " - assuming that UIServer is being launched" + "in a development environment and not from a packaged release");
String developmentStaticFileLocation = UIServer.class.getProtectionDomain().getCodeSource().getLocation().getPath() + "WEB-INF";
if (Files.exists(Paths.get(developmentStaticFileLocation))) {
holderHome.setInitParameter("resourceBase", developmentStaticFileLocation);
} else {
throw new RuntimeException("Cannot find static file directory in development " + "location " + developmentStaticFileLocation);
}
}
holderHome.setInitParameter("dirAllowed", "true");
holderHome.setInitParameter("pathInfoOnly", "true");
context.addFilter(new FilterHolder(new HeaderResponseServletFilter(metricsRegistry)), "/*", EnumSet.allOf(DispatcherType.class));
context.addServlet(holderHome, "/*");
// Lastly, the default servlet for root content (always needed, to satisfy servlet spec)
ServletHolder holderPwd = new ServletHolder("default", DefaultServlet.class);
holderPwd.setInitParameter("dirAllowed", "true");
context.addServlet(holderPwd, "/");
metricsRegistry.startMetricsReporters(conf);
Utils.addShutdownHookWithForceKillIn1Sec(metricsRegistry::stopMetricsReporters);
try {
jettyServer.start();
jettyServer.join();
} catch (Throwable t) {
LOG.error("Exception in UIServer: ", t);
throw new RuntimeException(t);
}
}
Aggregations