diff --git a/README.md b/README.md index 389d449..a105333 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,8 @@ and has instructions on how to run it. Users can [download releases](https://github.com/gaul/s3proxy/releases) from GitHub. Developers can build the project by running `mvn package` which -produces a binary at `target/s3proxy`. S3Proxy requires Java 8 or newer to run. +produces a binary at `target/s3proxy`. S3Proxy requires Java 11 or newer to +run. Configure S3Proxy via a properties file. An example using the local file system as the storage backend with anonymous access: diff --git a/pom.xml b/pom.xml index bc3ab75..455a528 100644 --- a/pom.xml +++ b/pom.xml @@ -491,7 +491,7 @@ org.eclipse.jetty jetty-servlet - 9.4.45.v20220203 + 11.0.11 org.slf4j diff --git a/src/main/java/org/gaul/s3proxy/AwsSignature.java b/src/main/java/org/gaul/s3proxy/AwsSignature.java index a16b40e..0e62007 100644 --- a/src/main/java/org/gaul/s3proxy/AwsSignature.java +++ b/src/main/java/org/gaul/s3proxy/AwsSignature.java @@ -34,7 +34,6 @@ import java.util.regex.Pattern; import javax.annotation.Nullable; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; -import javax.servlet.http.HttpServletRequest; import com.google.common.base.Joiner; import com.google.common.base.Splitter; @@ -46,6 +45,8 @@ import com.google.common.io.BaseEncoding; import com.google.common.net.HttpHeaders; import com.google.common.net.PercentEscaper; +import jakarta.servlet.http.HttpServletRequest; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/org/gaul/s3proxy/S3ErrorCode.java b/src/main/java/org/gaul/s3proxy/S3ErrorCode.java index d4158b2..e139960 100644 --- a/src/main/java/org/gaul/s3proxy/S3ErrorCode.java +++ b/src/main/java/org/gaul/s3proxy/S3ErrorCode.java @@ -18,10 +18,10 @@ package org.gaul.s3proxy; import static java.util.Objects.requireNonNull; -import javax.servlet.http.HttpServletResponse; - import com.google.common.base.CaseFormat; +import jakarta.servlet.http.HttpServletResponse; + /** * List of S3 error codes. Reference: * http://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html diff --git a/src/main/java/org/gaul/s3proxy/S3Proxy.java b/src/main/java/org/gaul/s3proxy/S3Proxy.java index de4533a..1dd4494 100644 --- a/src/main/java/org/gaul/s3proxy/S3Proxy.java +++ b/src/main/java/org/gaul/s3proxy/S3Proxy.java @@ -34,6 +34,7 @@ import com.google.common.collect.Lists; import org.eclipse.jetty.http.HttpCompliance; import org.eclipse.jetty.server.HttpConfiguration; import org.eclipse.jetty.server.HttpConnectionFactory; +import org.eclipse.jetty.server.SecureRequestCustomizer; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.ServerConnector; import org.eclipse.jetty.server.handler.ContextHandler; @@ -84,9 +85,13 @@ public final class S3Proxy { context.setContextPath(builder.servicePath); } + HttpConfiguration httpConfiguration = new HttpConfiguration(); + httpConfiguration.setHttpCompliance(HttpCompliance.LEGACY); + SecureRequestCustomizer src = new SecureRequestCustomizer(); + src.setSniHostCheck(false); + httpConfiguration.addCustomizer(src); HttpConnectionFactory httpConnectionFactory = - new HttpConnectionFactory( - new HttpConfiguration(), HttpCompliance.LEGACY); + new HttpConnectionFactory(httpConfiguration); ServerConnector connector; if (builder.endpoint != null) { connector = new ServerConnector(server, httpConnectionFactory); @@ -99,7 +104,7 @@ public final class S3Proxy { } if (builder.secureEndpoint != null) { - SslContextFactory sslContextFactory = + SslContextFactory.Server sslContextFactory = new SslContextFactory.Server(); sslContextFactory.setKeyStorePath(builder.keyStorePath); sslContextFactory.setKeyStorePassword(builder.keyStorePassword); diff --git a/src/main/java/org/gaul/s3proxy/S3ProxyHandler.java b/src/main/java/org/gaul/s3proxy/S3ProxyHandler.java index 235ee7b..064886b 100644 --- a/src/main/java/org/gaul/s3proxy/S3ProxyHandler.java +++ b/src/main/java/org/gaul/s3proxy/S3ProxyHandler.java @@ -53,8 +53,6 @@ import java.util.concurrent.atomic.AtomicReference; import javax.annotation.Nullable; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import javax.xml.stream.XMLOutputFactory; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; @@ -82,6 +80,9 @@ import com.google.common.net.HostAndPort; import com.google.common.net.HttpHeaders; import com.google.common.net.PercentEscaper; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + import org.apache.commons.fileupload.MultipartStream; import org.jclouds.blobstore.BlobStore; import org.jclouds.blobstore.KeyNotFoundException; diff --git a/src/main/java/org/gaul/s3proxy/S3ProxyHandlerJetty.java b/src/main/java/org/gaul/s3proxy/S3ProxyHandlerJetty.java index c2fb331..b0f74ce 100644 --- a/src/main/java/org/gaul/s3proxy/S3ProxyHandlerJetty.java +++ b/src/main/java/org/gaul/s3proxy/S3ProxyHandlerJetty.java @@ -21,11 +21,12 @@ import java.io.InputStream; import java.util.concurrent.TimeoutException; import javax.annotation.Nullable; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import com.google.common.collect.ImmutableMap; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.handler.AbstractHandler; import org.jclouds.blobstore.BlobStore; diff --git a/src/test/java/org/gaul/s3proxy/AwsSdkTest.java b/src/test/java/org/gaul/s3proxy/AwsSdkTest.java index e178f24..c5e9b80 100644 --- a/src/test/java/org/gaul/s3proxy/AwsSdkTest.java +++ b/src/test/java/org/gaul/s3proxy/AwsSdkTest.java @@ -1006,7 +1006,7 @@ public final class AwsSdkTest { @Test public void testSinglepartUploadJettyCachedHeader() throws Exception { String blobName = "singlepart-upload-jetty-cached"; - String contentType = "text/plain;charset=utf-8"; + String contentType = "text/plain"; ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentLength(BYTE_SOURCE.size()); metadata.setContentType(contentType);