From 4f0dbfbcd53700b4f85ac3a30d3dbe88818aff0b Mon Sep 17 00:00:00 2001 From: Jan Hentschel Date: Wed, 7 Feb 2018 18:52:59 +0100 Subject: [PATCH] HBASE-19762 Fixed Checkstyle errors in hbase-http --- .../resources/hbase/checkstyle-suppressions.xml | 5 + hbase-http/pom.xml | 7 ++ .../hbase/http/ClickjackingPreventionFilter.java | 45 ++++---- .../org/apache/hadoop/hbase/http/HtmlQuoting.java | 52 +++++---- .../org/apache/hadoop/hbase/http/HttpConfig.java | 5 +- .../apache/hadoop/hbase/http/HttpRequestLog.java | 7 +- .../hadoop/hbase/http/HttpRequestLogAppender.java | 3 +- .../org/apache/hadoop/hbase/http/HttpServer.java | 120 ++++++++++++++------- .../apache/hadoop/hbase/http/HttpServerUtil.java | 9 +- .../org/apache/hadoop/hbase/http/InfoServer.java | 43 ++++---- .../apache/hadoop/hbase/http/NoCacheFilter.java | 8 +- .../apache/hadoop/hbase/http/conf/ConfServlet.java | 7 +- .../hadoop/hbase/http/jmx/JMXJsonServlet.java | 6 +- .../org/apache/hadoop/hbase/http/log/LogLevel.java | 29 ++--- .../hbase/http/HttpServerFunctionalTest.java | 27 ++--- .../apache/hadoop/hbase/http/TestGlobalFilter.java | 16 +-- .../apache/hadoop/hbase/http/TestHtmlQuoting.java | 7 +- .../apache/hadoop/hbase/http/TestHttpServer.java | 36 +++---- .../apache/hadoop/hbase/http/TestPathFilter.java | 13 ++- .../hadoop/hbase/http/TestServletFilter.java | 10 +- .../hadoop/hbase/http/TestSpnegoHttpServer.java | 59 +++++----- .../apache/hadoop/hbase/http/log/TestLogLevel.java | 10 +- .../hadoop/hbase/http/resource/JerseyResource.java | 2 +- .../hadoop/hbase/http/ssl/KeyStoreTestUtil.java | 13 ++- 24 files changed, 310 insertions(+), 229 deletions(-) diff --git a/hbase-checkstyle/src/main/resources/hbase/checkstyle-suppressions.xml b/hbase-checkstyle/src/main/resources/hbase/checkstyle-suppressions.xml index b4173e0253..ad33cfa732 100644 --- a/hbase-checkstyle/src/main/resources/hbase/checkstyle-suppressions.xml +++ b/hbase-checkstyle/src/main/resources/hbase/checkstyle-suppressions.xml @@ -37,4 +37,9 @@ + + + + + diff --git a/hbase-http/pom.xml b/hbase-http/pom.xml index 84f098a6e3..32bed873fe 100644 --- a/hbase-http/pom.xml +++ b/hbase-http/pom.xml @@ -127,6 +127,13 @@ + + org.apache.maven.plugins + maven-checkstyle-plugin + + true + + diff --git a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/ClickjackingPreventionFilter.java b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/ClickjackingPreventionFilter.java index 9944d29e64..7ce13012a4 100644 --- a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/ClickjackingPreventionFilter.java +++ b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/ClickjackingPreventionFilter.java @@ -17,6 +17,8 @@ */ package org.apache.hadoop.hbase.http; +import java.io.IOException; + import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; @@ -24,32 +26,29 @@ import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import org.apache.yetus.audience.InterfaceAudience; import org.apache.hadoop.hbase.HBaseInterfaceAudience; +import org.apache.yetus.audience.InterfaceAudience; + @InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG) public class ClickjackingPreventionFilter implements Filter { - - private FilterConfig filterConfig; - - @Override - public void init(FilterConfig filterConfig) throws ServletException { - this.filterConfig = filterConfig; - } - - @Override - public void doFilter(ServletRequest req, ServletResponse res, - FilterChain chain) - throws IOException, ServletException { - HttpServletResponse httpRes = (HttpServletResponse) res; - httpRes.addHeader("X-Frame-Options", filterConfig.getInitParameter("xframeoptions")); - chain.doFilter(req, res); - } - - @Override - public void destroy() { - } - + private FilterConfig filterConfig; + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + this.filterConfig = filterConfig; + } + + @Override + public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) + throws IOException, ServletException { + HttpServletResponse httpRes = (HttpServletResponse) res; + httpRes.addHeader("X-Frame-Options", filterConfig.getInitParameter("xframeoptions")); + chain.doFilter(req, res); + } + + @Override + public void destroy() { + } } diff --git a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/HtmlQuoting.java b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/HtmlQuoting.java index 7f4bb83b52..174d5698d7 100644 --- a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/HtmlQuoting.java +++ b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/HtmlQuoting.java @@ -24,13 +24,16 @@ import java.io.OutputStream; /** * This class is responsible for quoting HTML characters. */ -public class HtmlQuoting { +public final class HtmlQuoting { private static final byte[] ampBytes = "&".getBytes(); private static final byte[] aposBytes = "'".getBytes(); private static final byte[] gtBytes = ">".getBytes(); private static final byte[] ltBytes = "<".getBytes(); private static final byte[] quotBytes = """.getBytes(); + private HtmlQuoting() { + } + /** * Does the given string need to be quoted? * @param data the string to check @@ -40,19 +43,19 @@ public class HtmlQuoting { */ public static boolean needsQuoting(byte[] data, int off, int len) { if (off+len > data.length) { - throw new IllegalStateException("off+len=" + off+len + " should be lower" + throw new IllegalStateException("off+len=" + off+len + " should be lower" + " than data length=" + data.length); } for(int i=off; i< off+len; ++i) { switch(data[i]) { - case '&': - case '<': - case '>': - case '\'': - case '"': - return true; - default: - break; + case '&': + case '<': + case '>': + case '\'': + case '"': + return true; + default: + break; } } return false; @@ -83,12 +86,23 @@ public class HtmlQuoting { int off, int len) throws IOException { for(int i=off; i < off+len; i++) { switch (buffer[i]) { - case '&': output.write(ampBytes); break; - case '<': output.write(ltBytes); break; - case '>': output.write(gtBytes); break; - case '\'': output.write(aposBytes); break; - case '"': output.write(quotBytes); break; - default: output.write(buffer, i, 1); + case '&': + output.write(ampBytes); + break; + case '<': + output.write(ltBytes); + break; + case '>': + output.write(gtBytes); + break; + case '\'': + output.write(aposBytes); + break; + case '"': + output.write(quotBytes); + break; + default: + output.write(buffer, i, 1); } } } @@ -122,8 +136,7 @@ public class HtmlQuoting { * @return a new stream that the application show write to * @throws IOException if the underlying output fails */ - public static OutputStream quoteOutputStream(final OutputStream out - ) throws IOException { + public static OutputStream quoteOutputStream(final OutputStream out) throws IOException { return new OutputStream() { private byte[] data = new byte[1]; @Override @@ -200,7 +213,7 @@ public class HtmlQuoting { public static void main(String[] args) throws Exception { if (args.length == 0) { - throw new IllegalArgumentException("Please provide some arguments"); + throw new IllegalArgumentException("Please provide some arguments"); } for(String arg:args) { System.out.println("Original: " + arg); @@ -211,5 +224,4 @@ public class HtmlQuoting { System.out.println(); } } - } diff --git a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/HttpConfig.java b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/HttpConfig.java index b9dde238db..52c9133dcf 100644 --- a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/HttpConfig.java +++ b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/HttpConfig.java @@ -17,9 +17,10 @@ */ package org.apache.hadoop.hbase.http; +import org.apache.hadoop.conf.Configuration; + import org.apache.yetus.audience.InterfaceAudience; import org.apache.yetus.audience.InterfaceStability; -import org.apache.hadoop.conf.Configuration; /** * Statics to get access to Http related configuration. @@ -51,7 +52,7 @@ public class HttpConfig { } } - public HttpConfig(final Configuration conf) { + public HttpConfig(final Configuration conf) { boolean sslEnabled = conf.getBoolean( ServerConfigurationKeys.HBASE_SSL_ENABLED_KEY, ServerConfigurationKeys.HBASE_SSL_ENABLED_DEFAULT); diff --git a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/HttpRequestLog.java b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/HttpRequestLog.java index 243da1b14f..6c97187ef0 100644 --- a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/HttpRequestLog.java +++ b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/HttpRequestLog.java @@ -32,8 +32,7 @@ import org.slf4j.impl.Log4jLoggerAdapter; /** * RequestLog object for use with Http */ -public class HttpRequestLog { - +public final class HttpRequestLog { private static final Logger LOG = LoggerFactory.getLogger(HttpRequestLog.class); private static final HashMap serverToComponent; @@ -43,6 +42,9 @@ public class HttpRequestLog { serverToComponent.put("region", "regionserver"); } + private HttpRequestLog() { + } + private static org.apache.log4j.Logger getLog4jLogger(String loggerName) { Logger logger = LoggerFactory.getLogger(loggerName); @@ -57,7 +59,6 @@ public class HttpRequestLog { } public static RequestLog getRequestLog(String name) { - String lookup = serverToComponent.get(name); if (lookup != null) { name = lookup; diff --git a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/HttpRequestLogAppender.java b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/HttpRequestLogAppender.java index 8039b34225..1b8bcb4dd6 100644 --- a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/HttpRequestLogAppender.java +++ b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/HttpRequestLogAppender.java @@ -17,14 +17,13 @@ */ package org.apache.hadoop.hbase.http; -import org.apache.log4j.spi.LoggingEvent; import org.apache.log4j.AppenderSkeleton; +import org.apache.log4j.spi.LoggingEvent; /** * Log4j Appender adapter for HttpRequestLog */ public class HttpRequestLogAppender extends AppenderSkeleton { - private String filename; private int retainDays; diff --git a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/HttpServer.java b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/HttpServer.java index af72ab8c1e..eced02f643 100644 --- a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/HttpServer.java +++ b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/HttpServer.java @@ -144,7 +144,7 @@ public class HttpServer implements FilterContainer { protected String appDir; protected String logDir; - private static class ListenerInfo { + private static final class ListenerInfo { /** * Boolean flag to determine whether the HTTP server should clean up the * listener in stop(). @@ -203,10 +203,22 @@ public class HttpServer implements FilterContainer { private String kerberosNameRulesKey; private String signatureSecretFileKey; + /** + * @see #setAppDir(String) + * @deprecated Since 0.99.0. Use builder pattern via {@link #setAppDir(String)} instead. + */ @Deprecated private String name; + /** + * @see #addEndpoint(URI) + * @deprecated Since 0.99.0. Use builder pattern via {@link #addEndpoint(URI)} instead. + */ @Deprecated private String bindAddress; + /** + * @see #addEndpoint(URI) + * @deprecated Since 0.99.0. Use builder pattern vai {@link #addEndpoint(URI)} instead. + */ @Deprecated private int port = -1; @@ -264,7 +276,8 @@ public class HttpServer implements FilterContainer { } /** - * Use setAppDir() instead. + * @see #setAppDir(String) + * @deprecated Since 0.99.0. Use {@link #setAppDir(String)} instead. */ @Deprecated public Builder setName(String name){ @@ -273,7 +286,8 @@ public class HttpServer implements FilterContainer { } /** - * Use addEndpoint() instead. + * @see #addEndpoint(URI) + * @deprecated Since 0.99.0. Use {@link #addEndpoint(URI)} instead. */ @Deprecated public Builder setBindAddress(String bindAddress){ @@ -282,7 +296,8 @@ public class HttpServer implements FilterContainer { } /** - * Use addEndpoint() instead. + * @see #addEndpoint(URI) + * @deprecated Since 0.99.0. Use {@link #addEndpoint(URI)} instead. */ @Deprecated public Builder setPort(int port) { @@ -336,14 +351,14 @@ public class HttpServer implements FilterContainer { } public Builder setAppDir(String appDir) { - this.appDir = appDir; - return this; - } + this.appDir = appDir; + return this; + } public Builder setLogDir(String logDir) { - this.logDir = logDir; - return this; - } + this.logDir = logDir; + return this; + } public HttpServer build() throws IOException { @@ -357,7 +372,8 @@ public class HttpServer implements FilterContainer { try { endpoints.add(0, new URI("http", "", bindAddress, port, "", "", "")); } catch (URISyntaxException e) { - throw new HadoopIllegalArgumentException("Invalid endpoint: "+ e); } + throw new HadoopIllegalArgumentException("Invalid endpoint: "+ e); + } } if (endpoints.isEmpty()) { @@ -438,10 +454,13 @@ public class HttpServer implements FilterContainer { } - /** Same as this(name, bindAddress, port, findPort, null); */ + /** + * @see #HttpServer(String, String, int, boolean, Configuration) + * @deprecated Since 0.99.0 + */ @Deprecated - public HttpServer(String name, String bindAddress, int port, boolean findPort - ) throws IOException { + public HttpServer(String name, String bindAddress, int port, boolean findPort) + throws IOException { this(name, bindAddress, port, findPort, new Configuration()); } @@ -458,6 +477,7 @@ public class HttpServer implements FilterContainer { * @param conf Configuration * @param pathSpecs Path specifications that this httpserver will be serving. * These will be added to any filters. + * @deprecated Since 0.99.0 */ @Deprecated public HttpServer(String name, String bindAddress, int port, @@ -473,6 +493,7 @@ public class HttpServer implements FilterContainer { * @param findPort whether the server should start at the given port and * increment by 1 until it finds a free port. * @param conf Configuration + * @deprecated Since 0.99.0 */ @Deprecated public HttpServer(String name, String bindAddress, int port, @@ -480,6 +501,20 @@ public class HttpServer implements FilterContainer { this(name, bindAddress, port, findPort, conf, null, null); } + /** + * Creates a status server on the given port. The JSP scripts are taken + * from src/webapp<name>. + * + * @param name the name of the server + * @param bindAddress the address for this server + * @param port the port to use on the server + * @param findPort whether the server should start at the given port and increment by 1 until it + * finds a free port + * @param conf the configuration to use + * @param adminsAcl {@link AccessControlList} of the admins + * @throws IOException when creating the server fails + * @deprecated Since 0.99.0 + */ @Deprecated public HttpServer(String name, String bindAddress, int port, boolean findPort, Configuration conf, AccessControlList adminsAcl) @@ -499,6 +534,7 @@ public class HttpServer implements FilterContainer { * @param adminsAcl {@link AccessControlList} of the admins * @param pathSpecs Path specifications that this httpserver will be serving. * These will be added to any filters. + * @deprecated Since 0.99.0 */ @Deprecated public HttpServer(String name, String bindAddress, int port, @@ -625,14 +661,13 @@ public class HttpServer implements FilterContainer { /** * Add default apps. * @param appDir The application directory - * @throws IOException */ protected void addDefaultApps(ContextHandlerCollection parent, - final String appDir, Configuration conf) throws IOException { + final String appDir, Configuration conf) { // set up the context for "/logs/" if "hadoop.log.dir" property is defined. String logDir = this.logDir; if (logDir == null) { - logDir = System.getProperty("hadoop.log.dir"); + logDir = System.getProperty("hadoop.log.dir"); } if (logDir != null) { ServletContextHandler logContext = new ServletContextHandler(parent, "/logs"); @@ -761,20 +796,18 @@ public class HttpServer implements FilterContainer { webAppContext.addServlet(holder, pathSpec); if(requireAuth && UserGroupInformation.isSecurityEnabled()) { - LOG.info("Adding Kerberos (SPNEGO) filter to " + name); - ServletHandler handler = webAppContext.getServletHandler(); - FilterMapping fmap = new FilterMapping(); - fmap.setPathSpec(pathSpec); - fmap.setFilterName(SPNEGO_FILTER); - fmap.setDispatches(FilterMapping.ALL); - handler.addFilterMapping(fmap); + LOG.info("Adding Kerberos (SPNEGO) filter to " + name); + ServletHandler handler = webAppContext.getServletHandler(); + FilterMapping fmap = new FilterMapping(); + fmap.setPathSpec(pathSpec); + fmap.setFilterName(SPNEGO_FILTER); + fmap.setDispatches(FilterMapping.ALL); + handler.addFilterMapping(fmap); } } @Override - public void addFilter(String name, String classname, - Map parameters) { - + public void addFilter(String name, String classname, Map parameters) { final String[] USER_FACING_URLS = { "*.html", "*.jsp" }; defineFilter(webAppContext, name, classname, parameters, USER_FACING_URLS); LOG.info("Added filter " + name + " (class=" + classname @@ -792,8 +825,7 @@ public class HttpServer implements FilterContainer { } @Override - public void addGlobalFilter(String name, String classname, - Map parameters) { + public void addGlobalFilter(String name, String classname, Map parameters) { final String[] ALL_URLS = { "/*" }; defineFilter(webAppContext, name, classname, parameters, ALL_URLS); for (ServletContextHandler ctx : defaultContexts.keySet()) { @@ -807,7 +839,6 @@ public class HttpServer implements FilterContainer { */ public static void defineFilter(ServletContextHandler handler, String name, String classname, Map parameters, String[] urls) { - FilterHolder holder = new FilterHolder(); holder.setName(name); holder.setClassName(classname); @@ -851,7 +882,7 @@ public class HttpServer implements FilterContainer { } public String getWebAppsPath(String appName) throws FileNotFoundException { - return getWebAppsPath(this.appDir, appName); + return getWebAppsPath(this.appDir, appName); } /** @@ -862,9 +893,12 @@ public class HttpServer implements FilterContainer { */ protected String getWebAppsPath(String webapps, String appName) throws FileNotFoundException { URL url = getClass().getClassLoader().getResource(webapps + "/" + appName); - if (url == null) + + if (url == null) { throw new FileNotFoundException(webapps + "/" + appName - + " not found in CLASSPATH"); + + " not found in CLASSPATH"); + } + String urlString = url.toString(); return urlString.substring(0, urlString.lastIndexOf('/')); } @@ -872,6 +906,7 @@ public class HttpServer implements FilterContainer { /** * Get the port that the server is on * @return the port + * @deprecated Since 0.99.0 */ @Deprecated public int getPort() { @@ -886,8 +921,10 @@ public class HttpServer implements FilterContainer { */ public InetSocketAddress getConnectorAddress(int index) { Preconditions.checkArgument(index >= 0); - if (index > webServer.getConnectors().length) + + if (index > webServer.getConnectors().length) { return null; + } ServerConnector c = (ServerConnector)webServer.getConnectors()[index]; if (c.getLocalPort() == -1 || c.getLocalPort() == -2) { @@ -1015,7 +1052,7 @@ public class HttpServer implements FilterContainer { /** * Open the main listener for the server - * @throws Exception + * @throws Exception if the listener cannot be opened or the appropriate port is already in use */ @VisibleForTesting void openListeners() throws Exception { @@ -1123,7 +1160,8 @@ public class HttpServer implements FilterContainer { return "Inactive HttpServer"; } else { StringBuilder sb = new StringBuilder("HttpServer (") - .append(isAlive() ? STATE_DESCRIPTION_ALIVE : STATE_DESCRIPTION_NOT_LIVE).append("), listening at:"); + .append(isAlive() ? STATE_DESCRIPTION_ALIVE : + STATE_DESCRIPTION_NOT_LIVE).append("), listening at:"); for (ListenerInfo li : listeners) { ServerConnector l = li.listener; sb.append(l.getHost()).append(":").append(l.getPort()).append("/,"); @@ -1168,11 +1206,11 @@ public class HttpServer implements FilterContainer { * Does the user sending the HttpServletRequest has the administrator ACLs? If * it isn't the case, response will be modified to send an error to the user. * - * @param servletContext - * @param request + * @param servletContext the {@link ServletContext} to use + * @param request the {@link HttpServletRequest} to check * @param response used to send the error response if user does not have admin access. * @return true if admin-authorized, false otherwise - * @throws IOException + * @throws IOException if an unauthenticated or unauthorized user tries to access the page */ public static boolean hasAdministratorAccess( ServletContext servletContext, HttpServletRequest request, @@ -1288,8 +1326,8 @@ public class HttpServer implements FilterContainer { */ @Override public String getParameter(String name) { - return HtmlQuoting.quoteHtmlChars(rawRequest.getParameter - (HtmlQuoting.unquoteHtmlChars(name))); + return HtmlQuoting.quoteHtmlChars(rawRequest.getParameter( + HtmlQuoting.unquoteHtmlChars(name))); } @Override diff --git a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/HttpServerUtil.java b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/HttpServerUtil.java index 0b33fd124c..fb3dc3cfda 100644 --- a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/HttpServerUtil.java +++ b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/HttpServerUtil.java @@ -17,15 +17,18 @@ */ package org.apache.hadoop.hbase.http; -import org.eclipse.jetty.security.ConstraintSecurityHandler; -import org.eclipse.jetty.util.security.Constraint; import org.eclipse.jetty.security.ConstraintMapping; +import org.eclipse.jetty.security.ConstraintSecurityHandler; import org.eclipse.jetty.servlet.ServletContextHandler; +import org.eclipse.jetty.util.security.Constraint; /** * HttpServer utility. */ -public class HttpServerUtil { +public final class HttpServerUtil { + private HttpServerUtil() { + } + /** * Add constraints to a Jetty Context to disallow undesirable Http methods. * @param ctxHandler The context to modify diff --git a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/InfoServer.java b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/InfoServer.java index 5fd6514f91..907032b648 100644 --- a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/InfoServer.java +++ b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/InfoServer.java @@ -24,9 +24,9 @@ import java.net.URI; import javax.servlet.http.HttpServlet; +import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.yetus.audience.InterfaceAudience; -import org.apache.hadoop.conf.Configuration; /** * Create a Jetty embedded server to answer http requests. The primary goal @@ -38,7 +38,6 @@ import org.apache.hadoop.conf.Configuration; */ @InterfaceAudience.Private public class InfoServer { - private static final String HBASE_APP_DIR = "hbase-webapps"; private final org.apache.hadoop.hbase.http.HttpServer httpServer; @@ -48,8 +47,8 @@ public class InfoServer { * @param name The name of the server * @param bindAddress address to bind to * @param port The port to use on the server - * @param findPort whether the server should start at the given port and - * increment by 1 until it finds a free port. + * @param findPort whether the server should start at the given port and increment by 1 until it + * finds a free port. * @throws IOException e */ public InfoServer(String name, String bindAddress, int port, boolean findPort, @@ -59,21 +58,22 @@ public class InfoServer { HttpServer.Builder builder = new org.apache.hadoop.hbase.http.HttpServer.Builder(); - builder.setName(name).addEndpoint(URI.create(httpConfig.getSchemePrefix() + - bindAddress + ":" + - port)).setAppDir(HBASE_APP_DIR).setFindPort(findPort).setConf(c); - String logDir = System.getProperty("hbase.log.dir"); - if (logDir != null) { - builder.setLogDir(logDir); - } + builder.setName(name).addEndpoint(URI.create(httpConfig.getSchemePrefix() + + bindAddress + ":" + + port)).setAppDir(HBASE_APP_DIR).setFindPort(findPort).setConf(c); + String logDir = System.getProperty("hbase.log.dir"); + if (logDir != null) { + builder.setLogDir(logDir); + } if (httpConfig.isSecure()) { - builder.keyPassword(HBaseConfiguration.getPassword(c, "ssl.server.keystore.keypassword", null)) - .keyStore(c.get("ssl.server.keystore.location"), - HBaseConfiguration.getPassword(c,"ssl.server.keystore.password", null), - c.get("ssl.server.keystore.type", "jks")) - .trustStore(c.get("ssl.server.truststore.location"), - HBaseConfiguration.getPassword(c, "ssl.server.truststore.password", null), - c.get("ssl.server.truststore.type", "jks")); + builder.keyPassword(HBaseConfiguration + .getPassword(c, "ssl.server.keystore.keypassword", null)) + .keyStore(c.get("ssl.server.keystore.location"), + HBaseConfiguration.getPassword(c,"ssl.server.keystore.password", null), + c.get("ssl.server.keystore.type", "jks")) + .trustStore(c.get("ssl.server.truststore.location"), + HBaseConfiguration.getPassword(c, "ssl.server.truststore.password", null), + c.get("ssl.server.truststore.type", "jks")); } // Enable SPNEGO authentication if ("kerberos".equalsIgnoreCase(c.get(HttpServer.HTTP_UI_AUTHENTICATION, null))) { @@ -89,7 +89,7 @@ public class InfoServer { public void addServlet(String name, String pathSpec, Class clazz) { - this.httpServer.addServlet(name, pathSpec, clazz); + this.httpServer.addServlet(name, pathSpec, clazz); } public void setAttribute(String name, Object value) { @@ -100,6 +100,10 @@ public class InfoServer { this.httpServer.start(); } + /** + * @return the port of the info server + * @deprecated Since 0.99.0 + */ @Deprecated public int getPort() { return this.httpServer.getPort(); @@ -108,5 +112,4 @@ public class InfoServer { public void stop() throws Exception { this.httpServer.stop(); } - } diff --git a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/NoCacheFilter.java b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/NoCacheFilter.java index a1daf1590a..a1d41732d4 100644 --- a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/NoCacheFilter.java +++ b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/NoCacheFilter.java @@ -17,6 +17,8 @@ */ package org.apache.hadoop.hbase.http; +import java.io.IOException; + import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; @@ -24,14 +26,13 @@ import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import org.apache.yetus.audience.InterfaceAudience; import org.apache.hadoop.hbase.HBaseInterfaceAudience; +import org.apache.yetus.audience.InterfaceAudience; + @InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG) public class NoCacheFilter implements Filter { - @Override public void init(FilterConfig filterConfig) throws ServletException { } @@ -52,5 +53,4 @@ public class NoCacheFilter implements Filter { @Override public void destroy() { } - } diff --git a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/conf/ConfServlet.java b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/conf/ConfServlet.java index d9aa7b60aa..05ca9a3abd 100644 --- a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/conf/ConfServlet.java +++ b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/conf/ConfServlet.java @@ -25,11 +25,12 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.apache.yetus.audience.InterfaceAudience; -import org.apache.yetus.audience.InterfaceStability; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.http.HttpServer; +import org.apache.yetus.audience.InterfaceAudience; +import org.apache.yetus.audience.InterfaceStability; + /** * A servlet to print out the running configuration data. */ @@ -56,7 +57,6 @@ public class ConfServlet extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - if (!HttpServer.isInstrumentationAccessAllowed(getServletContext(), request, response)) { return; @@ -103,5 +103,4 @@ public class ConfServlet extends HttpServlet { super(msg); } } - } diff --git a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/jmx/JMXJsonServlet.java b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/jmx/JMXJsonServlet.java index 13d6c400ac..b117748da6 100644 --- a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/jmx/JMXJsonServlet.java +++ b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/jmx/JMXJsonServlet.java @@ -202,9 +202,11 @@ public class JMXJsonServlet extends HttpServlet { response.setStatus(HttpServletResponse.SC_BAD_REQUEST); } } finally { - if (beanWriter != null) beanWriter.close(); + if (beanWriter != null) { + beanWriter.close(); + } if (jsonpcb != null) { - writer.write(");"); + writer.write(");"); } if (writer != null) { writer.close(); diff --git a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/log/LogLevel.java b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/log/LogLevel.java index 0d409726e9..485581be11 100644 --- a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/log/LogLevel.java +++ b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/log/LogLevel.java @@ -32,24 +32,29 @@ import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.impl.Jdk14Logger; import org.apache.commons.logging.impl.Log4JLogger; +import org.apache.hadoop.hbase.http.HttpServer; +import org.apache.hadoop.util.ServletUtil; +import org.apache.log4j.LogManager; + import org.apache.yetus.audience.InterfaceAudience; import org.apache.yetus.audience.InterfaceStability; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.impl.Log4jLoggerAdapter; -import org.apache.hadoop.hbase.http.HttpServer; -import org.apache.hadoop.util.ServletUtil; -import org.apache.log4j.LogManager; /** * Change log level in runtime. */ @InterfaceStability.Evolving -public class LogLevel { +public final class LogLevel { public static final String USAGES = "\nUsage: General options are:\n" + "\t[-getlevel ]\n" + "\t[-setlevel ]\n"; + private LogLevel() { + } + /** * A command line implementation */ @@ -76,11 +81,11 @@ public class LogLevel { connection.connect(); try (InputStreamReader streamReader = new InputStreamReader(connection.getInputStream()); BufferedReader bufferedReader = new BufferedReader(streamReader)) { - for(String line; (line = bufferedReader.readLine()) != null; ) { - if (line.startsWith(MARKER)) { + bufferedReader.lines().forEach(line -> { + if (line != null && line.startsWith(MARKER)) { System.out.println(TAG.matcher(line).replaceAll("")); } - } + }); } } catch (IOException ioe) { System.err.println("" + ioe); @@ -99,9 +104,8 @@ public class LogLevel { private static final long serialVersionUID = 1L; @Override - public void doGet(HttpServletRequest request, HttpServletResponse response - ) throws ServletException, IOException { - + public void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { // Do the authorization if (!HttpServer.hasAdministratorAccess(getServletContext(), request, response)) { @@ -169,8 +173,9 @@ public class LogLevel { out.println(MARKER + "Setting Level to " + level + " ...
"); } - java.util.logging.Level lev; - for(; (lev = log.getLevel()) == null; log = log.getParent()); + java.util.logging.Level lev = log.getLevel(); + for (; lev == null; log = log.getParent()) { + } out.println(MARKER + "Effective level: " + lev + "
"); } } diff --git a/hbase-http/src/test/java/org/apache/hadoop/hbase/http/HttpServerFunctionalTest.java b/hbase-http/src/test/java/org/apache/hadoop/hbase/http/HttpServerFunctionalTest.java index 69972a2e12..b81826bd48 100644 --- a/hbase-http/src/test/java/org/apache/hadoop/hbase/http/HttpServerFunctionalTest.java +++ b/hbase-http/src/test/java/org/apache/hadoop/hbase/http/HttpServerFunctionalTest.java @@ -18,19 +18,19 @@ package org.apache.hadoop.hbase.http; -import org.apache.hadoop.net.NetUtils; -import org.apache.hadoop.security.authorize.AccessControlList; -import org.junit.Assert; -import org.apache.hadoop.conf.Configuration; -import org.apache.hadoop.hbase.http.HttpServer.Builder; - import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.net.MalformedURLException; import java.net.ServerSocket; import java.net.URI; import java.net.URL; -import java.net.MalformedURLException; + +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.hbase.http.HttpServer.Builder; +import org.apache.hadoop.net.NetUtils; +import org.apache.hadoop.security.authorize.AccessControlList; +import org.junit.Assert; /** * This is a base class for functional tests of the {@link HttpServer}. @@ -114,9 +114,9 @@ public class HttpServerFunctionalTest extends Assert { File testWebappDir = new File(webapps + File.separatorChar + TEST); try { - if (!testWebappDir.exists()) { - fail("Test webapp dir " + testWebappDir.getCanonicalPath() + " missing"); - } + if (!testWebappDir.exists()) { + fail("Test webapp dir " + testWebappDir.getCanonicalPath() + " missing"); + } } catch (IOException e) { } @@ -158,8 +158,8 @@ public class HttpServerFunctionalTest extends Assert { return localServerBuilder(webapp).setFindPort(true).setConf(conf).build(); } - public static HttpServer createServer(String webapp, Configuration conf, AccessControlList adminsAcl) - throws IOException { + public static HttpServer createServer(String webapp, Configuration conf, + AccessControlList adminsAcl) throws IOException { return localServerBuilder(webapp).setFindPort(true).setConf(conf).setACL(adminsAcl).build(); } @@ -178,7 +178,8 @@ public class HttpServerFunctionalTest extends Assert { */ public static HttpServer createServer(String webapp, Configuration conf, String[] pathSpecs) throws IOException { - return localServerBuilder(webapp).setFindPort(true).setConf(conf).setPathSpec(pathSpecs).build(); + return localServerBuilder(webapp).setFindPort(true).setConf(conf).setPathSpec(pathSpecs) + .build(); } /** diff --git a/hbase-http/src/test/java/org/apache/hadoop/hbase/http/TestGlobalFilter.java b/hbase-http/src/test/java/org/apache/hadoop/hbase/http/TestGlobalFilter.java index 81902901f8..b2a094e0a6 100644 --- a/hbase-http/src/test/java/org/apache/hadoop/hbase/http/TestGlobalFilter.java +++ b/hbase-http/src/test/java/org/apache/hadoop/hbase/http/TestGlobalFilter.java @@ -44,7 +44,6 @@ import org.slf4j.LoggerFactory; @Category({MiscTests.class, SmallTests.class}) public class TestGlobalFilter extends HttpServerFunctionalTest { - @ClassRule public static final HBaseClassTestRule CLASS_RULE = HBaseClassTestRule.forClass(TestGlobalFilter.class); @@ -69,8 +68,9 @@ public class TestGlobalFilter extends HttpServerFunctionalTest { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { - if (filterConfig == null) - return; + if (filterConfig == null) { + return; + } String uri = ((HttpServletRequest)request).getRequestURI(); LOG.info("filtering " + uri); @@ -89,7 +89,6 @@ public class TestGlobalFilter extends HttpServerFunctionalTest { } } - /** access a url, ignoring some IOException such as the page does not exist */ static void access(String urlstring) throws IOException { LOG.warn("access " + urlstring); @@ -101,7 +100,8 @@ public class TestGlobalFilter extends HttpServerFunctionalTest { BufferedReader in = new BufferedReader(new InputStreamReader( connection.getInputStream())); try { - for(; in.readLine() != null; ); + for(; in.readLine() != null; ) { + } } finally { in.close(); } @@ -131,8 +131,10 @@ public class TestGlobalFilter extends HttpServerFunctionalTest { final String outURL = "/static/a.out"; final String logURL = "/logs/a.log"; - final String[] urls = {fsckURL, stacksURL, ajspURL, listPathsURL, - dataURL, streamFile, rootURL, allURL, outURL, logURL}; + final String[] urls = { + fsckURL, stacksURL, ajspURL, listPathsURL, dataURL, streamFile, rootURL, allURL, + outURL, logURL + }; //access the urls final String prefix = "http://" diff --git a/hbase-http/src/test/java/org/apache/hadoop/hbase/http/TestHtmlQuoting.java b/hbase-http/src/test/java/org/apache/hadoop/hbase/http/TestHtmlQuoting.java index f47991d928..0f4c4d5d2a 100644 --- a/hbase-http/src/test/java/org/apache/hadoop/hbase/http/TestHtmlQuoting.java +++ b/hbase-http/src/test/java/org/apache/hadoop/hbase/http/TestHtmlQuoting.java @@ -17,7 +17,10 @@ */ package org.apache.hadoop.hbase.http; -import static org.junit.Assert.*; +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; import javax.servlet.http.HttpServletRequest; import org.apache.hadoop.hbase.HBaseClassTestRule; @@ -30,7 +33,6 @@ import org.mockito.Mockito; @Category({MiscTests.class, SmallTests.class}) public class TestHtmlQuoting { - @ClassRule public static final HBaseClassTestRule CLASS_RULE = HBaseClassTestRule.forClass(TestHtmlQuoting.class); @@ -73,7 +75,6 @@ public class TestHtmlQuoting { runRoundTrip(buffer.toString()); } - @Test public void testRequestQuoting() throws Exception { HttpServletRequest mockReq = Mockito.mock(HttpServletRequest.class); diff --git a/hbase-http/src/test/java/org/apache/hadoop/hbase/http/TestHttpServer.java b/hbase-http/src/test/java/org/apache/hadoop/hbase/http/TestHttpServer.java index 16350d5b42..6fda04a1b6 100644 --- a/hbase-http/src/test/java/org/apache/hadoop/hbase/http/TestHttpServer.java +++ b/hbase-http/src/test/java/org/apache/hadoop/hbase/http/TestHttpServer.java @@ -322,13 +322,12 @@ public class TestHttpServer extends HttpServerFunctionalTest { * will be accessed as the passed user, by sending user.name request * parameter. * - * @param urlstring - * @param userName - * @return - * @throws IOException + * @param urlstring the URL to connect to + * @param userName the name of the user to use + * @return the HTTP status code returned from the URL + * @throws IOException if creating the connection fails */ - static int getHttpStatusCode(String urlstring, String userName) - throws IOException { + static int getHttpStatusCode(String urlstring, String userName) throws IOException { URL url = new URL(urlstring + "?user.name=" + userName); System.out.println("Accessing " + url + " as user " + userName); HttpURLConnection connection = (HttpURLConnection)url.openConnection(); @@ -356,12 +355,12 @@ public class TestHttpServer extends HttpServerFunctionalTest { * Verify the access for /logs, /stacks, /conf, /logLevel and /metrics * servlets, when authentication filters are set, but authorization is not * enabled. - * @throws Exception + * + * @throws Exception if starting the server or getting an HTTP status code fails */ @Test @Ignore public void testDisabledAuthorizationOfDefaultServlets() throws Exception { - Configuration conf = new Configuration(); // Authorization is disabled by default @@ -379,8 +378,9 @@ public class TestHttpServer extends HttpServerFunctionalTest { myServer.setAttribute(HttpServer.CONF_CONTEXT_ATTRIBUTE, conf); myServer.start(); String serverURL = "http://" + NetUtils.getHostPortString(myServer.getConnectorAddress(0)) + "/"; - for (String servlet : new String[] { "conf", "logs", "stacks", - "logLevel", "metrics" }) { + for (String servlet : new String[] { + "conf", "logs", "stacks", "logLevel", "metrics" + }) { for (String user : new String[] { "userA", "userB" }) { assertEquals(HttpURLConnection.HTTP_OK, getHttpStatusCode(serverURL + servlet, user)); @@ -393,7 +393,7 @@ public class TestHttpServer extends HttpServerFunctionalTest { * Verify the administrator access for /logs, /stacks, /conf, /logLevel and * /metrics servlets. * - * @throws Exception + * @throws Exception if starting the server or getting an HTTP status code fails */ @Test @Ignore @@ -424,8 +424,9 @@ public class TestHttpServer extends HttpServerFunctionalTest { String serverURL = "http://" + NetUtils.getHostPortString(myServer.getConnectorAddress(0)) + "/"; - for (String servlet : new String[] { "conf", "logs", "stacks", - "logLevel", "metrics" }) { + for (String servlet : new String[] { + "conf", "logs", "stacks", "logLevel", "metrics" + }) { for (String user : new String[] { "userA", "userB", "userC", "userD" }) { assertEquals(HttpURLConnection.HTTP_OK, getHttpStatusCode(serverURL + servlet, user)); @@ -490,7 +491,8 @@ public class TestHttpServer extends HttpServerFunctionalTest { response = Mockito.mock(HttpServletResponse.class); conf.setBoolean(CommonConfigurationKeys.HADOOP_SECURITY_AUTHORIZATION, true); Assert.assertFalse(HttpServer.hasAdministratorAccess(context, request, response)); - Mockito.verify(response).sendError(Mockito.eq(HttpServletResponse.SC_UNAUTHORIZED), Mockito.anyString()); + Mockito.verify(response).sendError(Mockito.eq(HttpServletResponse.SC_UNAUTHORIZED), + Mockito.anyString()); //authorization ON & user NOT NULL & ACLs NULL response = Mockito.mock(HttpServletResponse.class); @@ -503,14 +505,14 @@ public class TestHttpServer extends HttpServerFunctionalTest { Mockito.when(acls.isUserAllowed(Mockito.any())).thenReturn(false); Mockito.when(context.getAttribute(HttpServer.ADMINS_ACL)).thenReturn(acls); Assert.assertFalse(HttpServer.hasAdministratorAccess(context, request, response)); - Mockito.verify(response).sendError(Mockito.eq(HttpServletResponse.SC_UNAUTHORIZED), Mockito.anyString()); + Mockito.verify(response).sendError(Mockito.eq(HttpServletResponse.SC_UNAUTHORIZED), + Mockito.anyString()); //authorization ON & user NOT NULL & ACLs NOT NULL & user in in ACLs response = Mockito.mock(HttpServletResponse.class); Mockito.when(acls.isUserAllowed(Mockito.any())).thenReturn(true); Mockito.when(context.getAttribute(HttpServer.ADMINS_ACL)).thenReturn(acls); Assert.assertTrue(HttpServer.hasAdministratorAccess(context, request, response)); - } @Test @@ -605,8 +607,6 @@ public class TestHttpServer extends HttpServerFunctionalTest { myServer.stop(); } - - @Test public void testNoCacheHeader() throws Exception { URL url = new URL(baseUrl, "/echo?a=b&c=d"); diff --git a/hbase-http/src/test/java/org/apache/hadoop/hbase/http/TestPathFilter.java b/hbase-http/src/test/java/org/apache/hadoop/hbase/http/TestPathFilter.java index 47e6ea26f1..7dc30915bb 100644 --- a/hbase-http/src/test/java/org/apache/hadoop/hbase/http/TestPathFilter.java +++ b/hbase-http/src/test/java/org/apache/hadoop/hbase/http/TestPathFilter.java @@ -44,7 +44,6 @@ import org.slf4j.LoggerFactory; @Category({MiscTests.class, SmallTests.class}) public class TestPathFilter extends HttpServerFunctionalTest { - @ClassRule public static final HBaseClassTestRule CLASS_RULE = HBaseClassTestRule.forClass(TestPathFilter.class); @@ -69,8 +68,9 @@ public class TestPathFilter extends HttpServerFunctionalTest { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { - if (filterConfig == null) - return; + if (filterConfig == null) { + return; + } String uri = ((HttpServletRequest)request).getRequestURI(); LOG.info("filtering " + uri); @@ -89,7 +89,6 @@ public class TestPathFilter extends HttpServerFunctionalTest { } } - /** access a url, ignoring some IOException such as the page does not exist */ static void access(String urlstring) throws IOException { LOG.warn("access " + urlstring); @@ -102,7 +101,8 @@ public class TestPathFilter extends HttpServerFunctionalTest { BufferedReader in = new BufferedReader(new InputStreamReader( connection.getInputStream())); try { - for(; in.readLine() != null; ); + for(; in.readLine() != null; ) { + } } finally { in.close(); } @@ -130,8 +130,7 @@ public class TestPathFilter extends HttpServerFunctionalTest { final String rootURL = "/"; final String allURL = "/*"; - final String[] filteredUrls = {baseURL, baseSlashURL, addedURL, - addedSlashURL, longURL}; + final String[] filteredUrls = { baseURL, baseSlashURL, addedURL, addedSlashURL, longURL }; final String[] notFilteredUrls = {rootURL, allURL}; // access the urls and verify our paths specs got added to the diff --git a/hbase-http/src/test/java/org/apache/hadoop/hbase/http/TestServletFilter.java b/hbase-http/src/test/java/org/apache/hadoop/hbase/http/TestServletFilter.java index 6c70dbc9d8..9f43151d45 100644 --- a/hbase-http/src/test/java/org/apache/hadoop/hbase/http/TestServletFilter.java +++ b/hbase-http/src/test/java/org/apache/hadoop/hbase/http/TestServletFilter.java @@ -46,7 +46,6 @@ import org.slf4j.LoggerFactory; @Category({MiscTests.class, SmallTests.class}) public class TestServletFilter extends HttpServerFunctionalTest { - @ClassRule public static final HBaseClassTestRule CLASS_RULE = HBaseClassTestRule.forClass(TestServletFilter.class); @@ -71,8 +70,9 @@ public class TestServletFilter extends HttpServerFunctionalTest { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { - if (filterConfig == null) - return; + if (filterConfig == null) { + return; + } uri = ((HttpServletRequest)request).getRequestURI(); LOG.info("filtering " + uri); @@ -108,7 +108,8 @@ public class TestServletFilter extends HttpServerFunctionalTest { BufferedReader in = new BufferedReader(new InputStreamReader( connection.getInputStream())); try { - for(; in.readLine() != null; ); + for(; in.readLine() != null; ) { + } } finally { in.close(); } @@ -218,5 +219,4 @@ public class TestServletFilter extends HttpServerFunctionalTest { assertExceptionContains("Unable to initialize WebAppContext", e); } } - } diff --git a/hbase-http/src/test/java/org/apache/hadoop/hbase/http/TestSpnegoHttpServer.java b/hbase-http/src/test/java/org/apache/hadoop/hbase/http/TestSpnegoHttpServer.java index 1262b0c1d4..8d3cd9568a 100644 --- a/hbase-http/src/test/java/org/apache/hadoop/hbase/http/TestSpnegoHttpServer.java +++ b/hbase-http/src/test/java/org/apache/hadoop/hbase/http/TestSpnegoHttpServer.java @@ -69,7 +69,6 @@ import org.slf4j.LoggerFactory; */ @Category({MiscTests.class, SmallTests.class}) public class TestSpnegoHttpServer extends HttpServerFunctionalTest { - @ClassRule public static final HBaseClassTestRule CLASS_RULE = HBaseClassTestRule.forClass(TestSpnegoHttpServer.class); @@ -208,35 +207,35 @@ public class TestSpnegoHttpServer extends HttpServerFunctionalTest { final String principalName = clientPrincipals.iterator().next().getName(); // Run this code, logged in as the subject (the client) - HttpResponse resp = Subject.doAs(clientSubject, - new PrivilegedExceptionAction() { - @Override - public HttpResponse run() throws Exception { - // Logs in with Kerberos via GSS - GSSManager gssManager = GSSManager.getInstance(); - // jGSS Kerberos login constant - Oid oid = new Oid("1.2.840.113554.1.2.2"); - GSSName gssClient = gssManager.createName(principalName, GSSName.NT_USER_NAME); - GSSCredential credential = gssManager.createCredential(gssClient, - GSSCredential.DEFAULT_LIFETIME, oid, GSSCredential.INITIATE_ONLY); - - HttpClientContext context = HttpClientContext.create(); - Lookup authRegistry = RegistryBuilder.create() - .register(AuthSchemes.SPNEGO, new SPNegoSchemeFactory(true, true)) - .build(); - - HttpClient client = HttpClients.custom().setDefaultAuthSchemeRegistry(authRegistry).build(); - BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider(); - credentialsProvider.setCredentials(AuthScope.ANY, new KerberosCredentials(credential)); - - URL url = new URL(getServerURL(server), "/echo?a=b"); - context.setTargetHost(new HttpHost(url.getHost(), url.getPort())); - context.setCredentialsProvider(credentialsProvider); - context.setAuthSchemeRegistry(authRegistry); - - HttpGet get = new HttpGet(url.toURI()); - return client.execute(get, context); - } + HttpResponse resp = Subject.doAs(clientSubject, new PrivilegedExceptionAction() { + @Override + public HttpResponse run() throws Exception { + // Logs in with Kerberos via GSS + GSSManager gssManager = GSSManager.getInstance(); + // jGSS Kerberos login constant + Oid oid = new Oid("1.2.840.113554.1.2.2"); + GSSName gssClient = gssManager.createName(principalName, GSSName.NT_USER_NAME); + GSSCredential credential = gssManager.createCredential(gssClient, + GSSCredential.DEFAULT_LIFETIME, oid, GSSCredential.INITIATE_ONLY); + + HttpClientContext context = HttpClientContext.create(); + Lookup authRegistry = RegistryBuilder.create() + .register(AuthSchemes.SPNEGO, new SPNegoSchemeFactory(true, true)) + .build(); + + HttpClient client = HttpClients.custom().setDefaultAuthSchemeRegistry(authRegistry) + .build(); + BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider(); + credentialsProvider.setCredentials(AuthScope.ANY, new KerberosCredentials(credential)); + + URL url = new URL(getServerURL(server), "/echo?a=b"); + context.setTargetHost(new HttpHost(url.getHost(), url.getPort())); + context.setCredentialsProvider(credentialsProvider); + context.setAuthSchemeRegistry(authRegistry); + + HttpGet get = new HttpGet(url.toURI()); + return client.execute(get, context); + } }); assertNotNull(resp); diff --git a/hbase-http/src/test/java/org/apache/hadoop/hbase/http/log/TestLogLevel.java b/hbase-http/src/test/java/org/apache/hadoop/hbase/http/log/TestLogLevel.java index e552ce247b..18d534713a 100644 --- a/hbase-http/src/test/java/org/apache/hadoop/hbase/http/log/TestLogLevel.java +++ b/hbase-http/src/test/java/org/apache/hadoop/hbase/http/log/TestLogLevel.java @@ -40,7 +40,6 @@ import org.slf4j.impl.Log4jLoggerAdapter; @Category({MiscTests.class, SmallTests.class}) public class TestLogLevel { - @ClassRule public static final HBaseClassTestRule CLASS_RULE = HBaseClassTestRule.forClass(TestLogLevel.class); @@ -76,7 +75,11 @@ public class TestLogLevel { new URL("http://" + authority + "/logLevel?log=" + logName + "&level=" + Level.ERROR); out.println("*** Connecting to " + url); try (BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()))) { - for(String line; (line = in.readLine()) != null; out.println(line)); + in.lines().forEach(line -> { + if (line != null) { + out.println(line); + } + }); } log.debug("log.debug2"); log.info("log.info2"); @@ -95,8 +98,7 @@ public class TestLogLevel { server.stop(); } } - } - else { + } else { out.println(testlog.getClass() + " not tested."); } } diff --git a/hbase-http/src/test/java/org/apache/hadoop/hbase/http/resource/JerseyResource.java b/hbase-http/src/test/java/org/apache/hadoop/hbase/http/resource/JerseyResource.java index 31ff0ed4e0..593b1c2224 100644 --- a/hbase-http/src/test/java/org/apache/hadoop/hbase/http/resource/JerseyResource.java +++ b/hbase-http/src/test/java/org/apache/hadoop/hbase/http/resource/JerseyResource.java @@ -52,7 +52,7 @@ public class JerseyResource { public Response get( @PathParam(PATH) @DefaultValue("UNKNOWN_" + PATH) final String path, @QueryParam(OP) @DefaultValue("UNKNOWN_" + OP) final String op - ) throws IOException { + ) throws IOException { LOG.info("get: " + PATH + "=" + path + ", " + OP + "=" + op); final Map m = new TreeMap<>(); diff --git a/hbase-http/src/test/java/org/apache/hadoop/hbase/http/ssl/KeyStoreTestUtil.java b/hbase-http/src/test/java/org/apache/hadoop/hbase/http/ssl/KeyStoreTestUtil.java index 35d6236949..aa8c2446c6 100644 --- a/hbase-http/src/test/java/org/apache/hadoop/hbase/http/ssl/KeyStoreTestUtil.java +++ b/hbase-http/src/test/java/org/apache/hadoop/hbase/http/ssl/KeyStoreTestUtil.java @@ -49,7 +49,9 @@ import org.apache.hadoop.security.ssl.FileBasedKeyStoresFactory; import org.apache.hadoop.security.ssl.SSLFactory; import org.bouncycastle.x509.X509V1CertificateGenerator; -public class KeyStoreTestUtil { +public final class KeyStoreTestUtil { + private KeyStoreTestUtil() { + } public static String getClasspathDir(Class klass) throws Exception { String file = klass.getName(); @@ -69,11 +71,12 @@ public class KeyStoreTestUtil { * @param algorithm the signing algorithm, eg "SHA1withRSA" * @return the self-signed certificate */ - public static X509Certificate generateCertificate(String dn, KeyPair pair, int days, String algorithm) - throws CertificateEncodingException, InvalidKeyException, IllegalStateException, - NoSuchProviderException, NoSuchAlgorithmException, SignatureException { + public static X509Certificate generateCertificate(String dn, KeyPair pair, int days, + String algorithm) throws CertificateEncodingException, InvalidKeyException, + IllegalStateException, NoSuchProviderException, NoSuchAlgorithmException, + SignatureException { Date from = new Date(); - Date to = new Date(from.getTime() + days * 86400000l); + Date to = new Date(from.getTime() + days * 86400000L); BigInteger sn = new BigInteger(64, new SecureRandom()); KeyPair keyPair = pair; X509V1CertificateGenerator certGen = new X509V1CertificateGenerator(); -- 2.14.3 (Apple Git-98)