Skip to content

Commit

Permalink
Docs / Reuse HttpServerConfiguration.MultipartConfiguration
Browse files Browse the repository at this point in the history
  • Loading branch information
graemerocher committed Mar 3, 2020
1 parent 0e1c470 commit 90a67cb
Show file tree
Hide file tree
Showing 15 changed files with 147 additions and 122 deletions.
@@ -1,16 +1,13 @@
package io.micronaut.servlet.jetty;

import io.micronaut.context.annotation.ConfigurationBuilder;
import io.micronaut.context.annotation.ConfigurationInject;
import io.micronaut.context.annotation.ConfigurationProperties;
import io.micronaut.core.bind.annotation.Bindable;
import io.micronaut.core.convert.format.MapFormat;
import io.micronaut.core.naming.conventions.StringConvention;
import io.micronaut.http.server.HttpServerConfiguration;
import org.eclipse.jetty.server.HttpConfiguration;

import javax.annotation.Nullable;
import javax.servlet.MultipartConfigElement;
import java.util.Collections;
import java.util.Map;
import java.util.Optional;
Expand Down Expand Up @@ -74,27 +71,4 @@ public void setInitParameters(
this.initParameters = initParameters;
}
}

/**
* The multipart configuration.
*/
@ConfigurationProperties("multipart")
public static class MultipartConfiguration extends MultipartConfigElement {

/**
* Default constructor.
* @param location The location
* @param maxFileSize The file size
* @param maxRequestSize The max request size
* @param fileSizeThreshold The threshold
*/
@ConfigurationInject
public MultipartConfiguration(
@Nullable String location,
@Bindable(defaultValue = "-1") long maxFileSize,
@Bindable(defaultValue = "-1") long maxRequestSize,
@Bindable(defaultValue = "0") int fileSizeThreshold) {
super(location, maxFileSize, maxRequestSize, fileSizeThreshold);
}
}
}
Expand Up @@ -12,6 +12,7 @@
import io.micronaut.http.ssl.ClientAuthentication;
import io.micronaut.http.ssl.SslConfiguration;
import io.micronaut.servlet.engine.DefaultMicronautServlet;
import io.micronaut.servlet.engine.MicronautServletConfiguration;
import io.micronaut.servlet.engine.server.ServletServerFactory;
import io.micronaut.servlet.engine.server.ServletStaticResourceConfiguration;
import org.eclipse.jetty.http.HttpVersion;
Expand Down Expand Up @@ -69,11 +70,12 @@ public JettyFactory(
* Builds the Jetty server bean.
*
* @param applicationContext This application context
* @param configuration The servlet configuration
* @return The Jetty server bean
*/
@Singleton
@Primary
protected Server jettyServer(ApplicationContext applicationContext) {
protected Server jettyServer(ApplicationContext applicationContext, MicronautServletConfiguration configuration) {
final String host = getConfiguredHost();
final Integer port = getConfiguredPort();
Server server = new Server();
Expand Down Expand Up @@ -138,34 +140,33 @@ public Resource newResource(String urlOrPath) throws IOException {
final ServletHolder servletHolder = new ServletHolder(new DefaultMicronautServlet(applicationContext));
contextHandler.addServlet(
servletHolder,
"/"
configuration.getMapping()
);
servletHolder.setAsyncSupported(true);

jettyConfiguration.getMultipartConfiguration().ifPresent(multipartConfiguration ->
configuration.getMultipartConfigElement().ifPresent(multipartConfiguration ->
servletHolder.getRegistration().setMultipartConfig(multipartConfiguration)
);

if (CollectionUtils.isNotEmpty(src)) {


List<String> mappings = src.stream()
.map(config -> {
String mapping = config.getMapping();
if (mapping.endsWith("**")) {
return mapping.substring(0, mapping.length() - 1);
} else if (!mapping.endsWith("/*")) {
return mapping + "/*";
}
return mapping;
})
.collect(Collectors.toList());
.map(config -> {
String mapping = config.getMapping();
if (mapping.endsWith("**")) {
return mapping.substring(0, mapping.length() - 1);
} else if (!mapping.endsWith("/*")) {
return mapping + "/*";
}
return mapping;
})
.collect(Collectors.toList());

if (CollectionUtils.isNotEmpty(mappings)) {

String servletName = DefaultServlet.class.getSimpleName();
ServletHolder defaultServletHolder = new ServletHolder(
servletName,
configuration.getName(),
new DefaultServlet()
);
defaultServletHolder.setInitParameters(jettyConfiguration.getInitParameters());
Expand All @@ -177,7 +178,7 @@ public Resource newResource(String urlOrPath) throws IOException {
ServletHandler servletHandler = defaultServletHolder.getServletHandler();
if (mappings.size() > 1) {
ServletMapping m = new ServletMapping();
m.setServletName(servletName);
m.setServletName(configuration.getName());
m.setPathSpecs(mappings.subList(1, mappings.size()).toArray(StringUtils.EMPTY_STRING_ARRAY));
servletHandler.addServletMapping(m);
}
Expand All @@ -190,7 +191,7 @@ public Resource newResource(String urlOrPath) throws IOException {
}

}
server.setHandler(contextHandler);
server.setHandler(contextHandler);

final SslConfiguration sslConfiguration = getSslConfiguration();
if (sslConfiguration.isEnabled()) {
Expand All @@ -207,7 +208,7 @@ public Resource newResource(String urlOrPath) throws IOException {
switch (clientAuth) {
case WANT:
sslContextFactory.setWantClientAuth(true);
break;
break;
case NEED:
default:
sslContextFactory.setNeedClientAuth(true);
Expand Down
@@ -1,6 +1,8 @@
package io.micronaut.servlet.jetty

import groovy.transform.EqualsAndHashCode
import io.micronaut.context.annotation.Property
import io.micronaut.core.util.StringUtils
import io.micronaut.http.HttpRequest
import io.micronaut.http.HttpResponse
import io.micronaut.http.HttpStatus
Expand All @@ -24,6 +26,7 @@ import java.nio.charset.StandardCharsets
* @since 1.0
*/
@MicronautTest
@Property(name = "micronaut.server.multipart.enabled", value = StringUtils.TRUE)
class JettyHttpPostSpec extends Specification {
@Inject
@Client("/")
Expand Down
@@ -1,6 +1,8 @@
package io.micronaut.servlet.jetty

import io.micronaut.context.annotation.Property
import io.micronaut.core.type.Argument
import io.micronaut.core.util.StringUtils
import io.micronaut.http.HttpHeaders
import io.micronaut.http.HttpRequest
import io.micronaut.http.HttpStatus
Expand All @@ -15,6 +17,7 @@ import spock.lang.Specification
import javax.inject.Inject

@MicronautTest
@Property(name = "micronaut.server.multipart.enabled", value = StringUtils.TRUE)
class JettyParameterBinding2Spec extends Specification {

@Inject
Expand Down
@@ -1,11 +1,9 @@
package io.micronaut.servlet.tomcat;

import io.micronaut.context.annotation.ConfigurationBuilder;
import io.micronaut.context.annotation.ConfigurationInject;
import io.micronaut.context.annotation.ConfigurationProperties;
import io.micronaut.context.annotation.Property;
import io.micronaut.core.annotation.TypeHint;
import io.micronaut.core.bind.annotation.Bindable;
import io.micronaut.core.convert.format.MapFormat;
import io.micronaut.core.naming.conventions.StringConvention;
import io.micronaut.core.util.CollectionUtils;
Expand All @@ -20,7 +18,6 @@
import org.apache.coyote.http2.Http2Protocol;

import javax.annotation.Nullable;
import javax.servlet.MultipartConfigElement;
import java.util.Map;
import java.util.Optional;

Expand Down Expand Up @@ -102,26 +99,4 @@ public Optional<MultipartConfiguration> getMultipartConfiguration() {
return Optional.ofNullable(multipartConfiguration);
}

/**
* The multipart configuration.
*/
@ConfigurationProperties("multipart")
public static class MultipartConfiguration extends MultipartConfigElement {

/**
* Default constructor.
* @param location The location
* @param maxFileSize The file size
* @param maxRequestSize The max request size
* @param fileSizeThreshold The threshold
*/
@ConfigurationInject
public MultipartConfiguration(
@Nullable String location,
@Bindable(defaultValue = "-1") long maxFileSize,
@Bindable(defaultValue = "-1") long maxRequestSize,
@Bindable(defaultValue = "0") int fileSizeThreshold) {
super(location, maxFileSize, maxRequestSize, fileSizeThreshold);
}
}
}
Expand Up @@ -8,6 +8,7 @@
import io.micronaut.core.io.socket.SocketUtils;
import io.micronaut.http.ssl.SslConfiguration;
import io.micronaut.servlet.engine.DefaultMicronautServlet;
import io.micronaut.servlet.engine.MicronautServletConfiguration;
import io.micronaut.servlet.engine.server.ServletServerFactory;
import io.micronaut.servlet.engine.server.ServletStaticResourceConfiguration;
import org.apache.catalina.Context;
Expand Down Expand Up @@ -61,11 +62,12 @@ public TomcatConfiguration getServerConfiguration() {
* The Tomcat server bean.
*
* @param connector The connector
* @param configuration The servlet configuration
* @return The Tomcat server
*/
@Singleton
@Primary
protected Tomcat tomcatServer(Connector connector) {
protected Tomcat tomcatServer(Connector connector, MicronautServletConfiguration configuration) {
Tomcat tomcat = new Tomcat();
tomcat.setHostname(getConfiguredHost());
final String contextPath = getContextPath();
Expand All @@ -75,12 +77,11 @@ protected Tomcat tomcatServer(Connector connector) {
final Context context = tomcat.addContext(cp, "/");
final Wrapper servlet = Tomcat.addServlet(
context,
"micronaut",
configuration.getName(),
new DefaultMicronautServlet(getApplicationContext())
);
servlet.addMapping("/*");
getServerConfiguration()
.getMultipartConfiguration()
servlet.addMapping(configuration.getMapping());
configuration.getMultipartConfigElement()
.ifPresent(servlet::setMultipartConfigElement);

SslConfiguration sslConfiguration = getSslConfiguration();
Expand Down
@@ -1,6 +1,8 @@
package io.micronaut.servlet.tomcat

import io.micronaut.context.annotation.Property
import io.micronaut.core.type.Argument
import io.micronaut.core.util.StringUtils
import io.micronaut.http.HttpHeaders
import io.micronaut.http.HttpRequest
import io.micronaut.http.HttpStatus
Expand All @@ -15,6 +17,7 @@ import spock.lang.Specification
import javax.inject.Inject

@MicronautTest
@Property(name = "micronaut.server.multipart.enabled", value = StringUtils.TRUE)
class TomcatParameterBinding2Spec extends Specification {

@Inject
Expand Down
@@ -1,18 +1,15 @@
package io.micronaut.servlet.undertow;

import io.micronaut.context.annotation.ConfigurationBuilder;
import io.micronaut.context.annotation.ConfigurationInject;
import io.micronaut.context.annotation.ConfigurationProperties;
import io.micronaut.core.annotation.TypeHint;
import io.micronaut.core.bind.annotation.Bindable;
import io.micronaut.core.convert.format.MapFormat;
import io.micronaut.core.naming.conventions.StringConvention;
import io.micronaut.http.server.HttpServerConfiguration;
import io.undertow.Undertow;
import io.undertow.UndertowOptions;

import javax.annotation.Nullable;
import javax.servlet.MultipartConfigElement;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
Expand Down Expand Up @@ -119,27 +116,4 @@ public void setServerOptions(
this.serverOptions.putAll(serverOptions);
}
}

/**
* The multipart configuration.
*/
@ConfigurationProperties("multipart")
public static class MultipartConfiguration extends MultipartConfigElement {

/**
* Default constructor.
* @param location The location
* @param maxFileSize The file size
* @param maxRequestSize The max request size
* @param fileSizeThreshold The threshold
*/
@ConfigurationInject
public MultipartConfiguration(
@Nullable String location,
@Bindable(defaultValue = "-1") long maxFileSize,
@Bindable(defaultValue = "-1") long maxRequestSize,
@Bindable(defaultValue = "0") int fileSizeThreshold) {
super(location, maxFileSize, maxRequestSize, fileSizeThreshold);
}
}
}

0 comments on commit 90a67cb

Please sign in to comment.