On Mon, May 22, 2017 at 9:02 AM, <[email protected]> wrote:

> Repository: logging-log4j2
> Updated Branches:
>   refs/heads/LOG4J2-1442 42dcb4588 -> 93ac8ab82
>
>
> Https support (W.I.P.)
>
>
> Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
> Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/
> commit/93ac8ab8
> Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/93ac8ab8
> Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/93ac8ab8
>
> Branch: refs/heads/LOG4J2-1442
> Commit: 93ac8ab82037ea77eee5e99cd3e6b26b0ea1ad95
> Parents: 42dcb45
> Author: Mikael Ståldal <[email protected]>
> Authored: Mon May 22 18:02:13 2017 +0200
> Committer: Mikael Ståldal <[email protected]>
> Committed: Mon May 22 18:02:13 2017 +0200
>
> ----------------------------------------------------------------------
>  .../log4j/core/appender/HttpAppender.java       | 15 +++++++++-
>  .../core/appender/HttpURLConnectionManager.java | 17 +++++++++--
>  .../log4j/core/appender/HttpAppenderTest.java   | 31 ++++++++++++++++++--
>  3 files changed, 58 insertions(+), 5 deletions(-)
> ----------------------------------------------------------------------
>
>
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/
> 93ac8ab8/log4j-core/src/main/java/org/apache/logging/log4j/
> core/appender/HttpAppender.java
> ----------------------------------------------------------------------
> diff --git 
> a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/HttpAppender.java
> b/log4j-core/src/main/java/org/apache/logging/log4j/core/
> appender/HttpAppender.java
> index c43c63d..efc9942 100644
> --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/
> appender/HttpAppender.java
> +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/
> appender/HttpAppender.java
> @@ -32,6 +32,7 @@ import org.apache.logging.log4j.core.config.plugins.
> PluginBuilderAttribute;
>  import org.apache.logging.log4j.core.config.plugins.PluginBuilderFactory;
>  import org.apache.logging.log4j.core.config.plugins.PluginElement;
>  import org.apache.logging.log4j.core.config.plugins.validation.
> constraints.Required;
> +import org.apache.logging.log4j.core.net.ssl.SslConfiguration;
>
>  /**
>   * Sends log events over HTTP.
> @@ -62,10 +63,13 @@ public final class HttpAppender extends
> AbstractAppender {
>          @PluginElement("Headers")
>          private Property[] headers;
>
> +        @PluginElement("SslConfiguration")
> +        private SslConfiguration sslConfiguration;
> +
>          @Override
>          public HttpAppender build() {
>              final HttpManager httpManager = new 
> HttpURLConnectionManager(getConfiguration(),
> getConfiguration().getLoggerContext(),
> -                getName(), url, method, connectTimeoutMillis,
> readTimeoutMillis, headers);
> +                getName(), url, method, connectTimeoutMillis,
> readTimeoutMillis, headers, sslConfiguration);
>              return new HttpAppender(getName(), getLayout(), getFilter(),
> isIgnoreExceptions(), httpManager);
>          }
>
> @@ -89,6 +93,10 @@ public final class HttpAppender extends
> AbstractAppender {
>              return headers;
>          }
>
> +        public SslConfiguration getSslConfiguration() {
> +            return sslConfiguration;
> +        }
> +
>          public B setUrl(final String url) {
>              this.url = url;
>              return asBuilder();
> @@ -113,6 +121,11 @@ public final class HttpAppender extends
> AbstractAppender {
>              this.headers = headers;
>              return asBuilder();
>          }
> +
> +        public B setSslConfiguration(final SslConfiguration
> sslConfiguration) {
> +            this.sslConfiguration = sslConfiguration;
> +            return asBuilder();
> +        }
>      }
>
>      /**
>
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/
> 93ac8ab8/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/
> HttpURLConnectionManager.java
> ----------------------------------------------------------------------
> diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/
> appender/HttpURLConnectionManager.java b/log4j-core/src/main/java/
> org/apache/logging/log4j/core/appender/HttpURLConnectionManager.java
> index d656c90..de9225c 100644
> --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/
> HttpURLConnectionManager.java
> +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/
> HttpURLConnectionManager.java
> @@ -26,12 +26,15 @@ import java.net.URL;
>  import java.nio.charset.Charset;
>  import java.util.Objects;
>
> +import javax.net.ssl.HttpsURLConnection;
> +
>  import org.apache.logging.log4j.core.Layout;
>  import org.apache.logging.log4j.core.LogEvent;
>  import org.apache.logging.log4j.core.LoggerContext;
>  import org.apache.logging.log4j.core.config.Configuration;
>  import org.apache.logging.log4j.core.config.ConfigurationException;
>  import org.apache.logging.log4j.core.config.Property;
> +import org.apache.logging.log4j.core.net.ssl.SslConfiguration;
>  import org.apache.logging.log4j.core.util.IOUtils;
>
>  public class HttpURLConnectionManager extends HttpManager {
> @@ -43,10 +46,13 @@ public class HttpURLConnectionManager extends
> HttpManager {
>      private final int connectTimeoutMillis;
>      private final int readTimeoutMillis;
>      private final Property[] headers;
> +    private final SslConfiguration sslConfiguration;
>
>      public HttpURLConnectionManager(final Configuration configuration,
> LoggerContext loggerContext, final String name,
> -                                    final String url, final String
> method, final int connectTimeoutMillis, final int readTimeoutMillis,
> -                                    final Property[] headers) {
> +                                    final String url, final String
> method, final int connectTimeoutMillis,
> +                                    final int readTimeoutMillis,
> +                                    final Property[] headers,
> +                                    SslConfiguration sslConfiguration) {
>          super(configuration, loggerContext, name);
>          try {
>              this.url = new URL(url);
> @@ -57,6 +63,10 @@ public class HttpURLConnectionManager extends
> HttpManager {
>          this.connectTimeoutMillis = connectTimeoutMillis;
>          this.readTimeoutMillis = readTimeoutMillis;
>          this.headers = headers != null ? headers : new Property[0];
> +        this.sslConfiguration = sslConfiguration;
> +        if (this.sslConfiguration != null && 
> !this.url.getProtocol().equalsIgnoreCase("https"))
> {
> +            throw new ConfigurationException("SSL configuration can only
> be specified with URL scheme https");
> +        }
>      }
>
>      @Override
> @@ -74,6 +84,9 @@ public class HttpURLConnectionManager extends
> HttpManager {
>                  header.getName(),
>                  header.isValueNeedsLookup() ? getConfiguration().
> getStrSubstitutor().replace(event, header.getValue()) :
> header.getValue());
>          }
> +        if (sslConfiguration != null) {
> +            ((HttpsURLConnection)urlConnection).setSSLSocketFactory(
> sslConfiguration.getSslSocketFactory());
> +        }
>
>          byte[] msg = layout.toByteArray(event);
>          urlConnection.setFixedLengthStreamingMode(msg.length);
>
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/
> 93ac8ab8/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/
> HttpAppenderTest.java
> ----------------------------------------------------------------------
> diff --git 
> a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/HttpAppenderTest.java
> b/log4j-core/src/test/java/org/apache/logging/log4j/core/
> appender/HttpAppenderTest.java
> index c9f9385..9ce31e0 100644
> --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/
> appender/HttpAppenderTest.java
> +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/
> appender/HttpAppenderTest.java
> @@ -10,6 +10,9 @@ import org.apache.logging.log4j.core.config.Property;
>  import org.apache.logging.log4j.core.impl.Log4jLogEvent;
>  import org.apache.logging.log4j.core.layout.JsonLayout;
>  import org.apache.logging.log4j.core.lookup.JavaLookup;
> +import org.apache.logging.log4j.core.net.ssl.KeyStoreConfiguration;
> +import org.apache.logging.log4j.core.net.ssl.SslConfiguration;
> +import org.apache.logging.log4j.core.net.ssl.TestConstants;
>  import org.apache.logging.log4j.junit.LoggerContextRule;
>  import org.apache.logging.log4j.message.SimpleMessage;
>  import org.apache.logging.log4j.status.StatusData;
> @@ -22,7 +25,6 @@ import static org.junit.Assert.*;
>  import static com.github.tomakehurst.wiremock.client.WireMock.*;
>  import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.
> wireMockConfig;
>
> -// TODO test HTTPS
>  public class HttpAppenderTest {
>
>      private static final String LOG_MESSAGE = "Hello, world!";
> @@ -50,7 +52,10 @@ public class HttpAppenderTest {
>      public LoggerContextRule ctx = new LoggerContextRule("
> HttpAppenderTest.xml");
>
>      @Rule
> -    public WireMockRule wireMockRule = new WireMockRule(wireMockConfig().
> dynamicPort());
> +    public WireMockRule wireMockRule = new WireMockRule(wireMockConfig().
> dynamicPort().dynamicHttpsPort()
> +        .keystorePath(TestConstants.KEYSTORE_FILE)
> +        .keystorePassword(TestConstants.KEYSTORE_PWD)
> +        .keystoreType(TestConstants.KEYSTORE_TYPE));
>
>      @Test
>      public void testAppend() throws Exception {
> @@ -72,6 +77,28 @@ public class HttpAppenderTest {
>      }
>
>      @Test
> +    public void testAppendHttps() throws Exception {
> +        wireMockRule.stubFor(post(urlEqualTo("/test/log4j/"))
> +            .willReturn(SUCCESS_RESPONSE));
> +
> +        final Appender appender = HttpAppender.newBuilder()
> +            .withName("Http")
> +            .withLayout(JsonLayout.createDefaultLayout())
> +            .setConfiguration(ctx.getConfiguration())
> +            .setUrl("https://localhost:"+wireMockRule.httpsPort()+"/
> test/log4j/")
>

Looks like you're missing some spaces there ;-)

I'd like to see SslConfiguration enhanced to allow for self-signed
certificates but I cannot take the time to do that ATM.

Gary


+            .setSslConfiguration(SslConfiguration.
> createSSLConfiguration("TLS",
> +                
> KeyStoreConfiguration.createKeyStoreConfiguration(TestConstants.KEYSTORE_FILE,
> TestConstants.KEYSTORE_PWD, TestConstants.KEYSTORE_TYPE, null),
> +                null))
> +            .build();
> +        appender.append(createLogEvent());
> +
> +        wireMockRule.verify(postRequestedFor(urlEqualTo("/test/log4j/"))
> +            .withHeader("Host", containing("localhost"))
> +            .withHeader("Content-Type", containing("application/json"))
> +            .withRequestBody(containing("\"message\" : \"" + LOG_MESSAGE
> + "\"")));
> +    }
> +
> +    @Test
>      public void testAppendMethodPut() throws Exception {
>          wireMockRule.stubFor(put(urlEqualTo("/test/log4j/1234"))
>              .willReturn(SUCCESS_RESPONSE));
>
>


-- 
E-Mail: [email protected] | [email protected]
Java Persistence with Hibernate, Second Edition
<https://www.amazon.com/gp/product/1617290459/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1617290459&linkCode=as2&tag=garygregory-20&linkId=cadb800f39946ec62ea2b1af9fe6a2b8>

<http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1617290459>
JUnit in Action, Second Edition
<https://www.amazon.com/gp/product/1935182021/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182021&linkCode=as2&tag=garygregory-20&linkId=31ecd1f6b6d1eaf8886ac902a24de418%22>

<http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1935182021>
Spring Batch in Action
<https://www.amazon.com/gp/product/1935182951/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182951&linkCode=%7B%7BlinkCode%7D%7D&tag=garygregory-20&linkId=%7B%7Blink_id%7D%7D%22%3ESpring+Batch+in+Action>
<http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1935182951>
Blog: http://garygregory.wordpress.com
Home: http://garygregory.com/
Tweet! http://twitter.com/GaryGregory

Reply via email to