Merge branch '1.2.x'

This commit is contained in:
Andy Wilkinson 2015-10-12 14:12:20 +01:00
commit 8ee8c9fe90
7 changed files with 20 additions and 41 deletions

View File

@ -153,7 +153,7 @@
<thymeleaf-extras-conditionalcomments.version>2.1.1.RELEASE</thymeleaf-extras-conditionalcomments.version>
<thymeleaf-layout-dialect.version>1.2.9</thymeleaf-layout-dialect.version>
<thymeleaf-extras-data-attribute.version>1.3</thymeleaf-extras-data-attribute.version>
<tomcat.version>8.0.26</tomcat.version>
<tomcat.version>8.0.28</tomcat.version>
<undertow.version>1.3.0.Final</undertow.version>
<velocity.version>1.7</velocity.version>
<velocity-tools.version>2.0</velocity-tools.version>

View File

@ -476,10 +476,6 @@ typically in `application.properties` or `application.yml`. For example:
See {sc-spring-boot}/context/embedded/Ssl.{sc-ext}[`Ssl`] for details of all of the
supported properties.
NOTE: Tomcat requires the key store (and trust store if you're using one) to be directly
accessible on the filesystem, i.e. it cannot be read from within a jar file. This
limitation doesn't apply to Jetty and Undertow.
Using configuration like the example above means the application will no longer support
plain HTTP connector at port 8080. Spring Boot doesn't support the configuration of both
an HTTP connector and an HTTPS connector via `application.properties`. If you want to

View File

@ -1,4 +1,4 @@
server.port = 8443
server.ssl.key-store = sample.jks
server.ssl.key-store = classpath:sample.jks
server.ssl.key-store-password = secret
server.ssl.key-password = password
server.ssl.key-password = password

View File

@ -326,9 +326,7 @@ public class TomcatEmbeddedServletContainerFactory
private void configureSslKeyStore(AbstractHttp11JsseProtocol<?> protocol, Ssl ssl) {
try {
assertNotClasspathResource(ssl.getKeyStore());
File file = ResourceUtils.getFile(ssl.getKeyStore());
protocol.setKeystoreFile(file.getAbsolutePath());
protocol.setKeystoreFile(ResourceUtils.getURL(ssl.getKeyStore()).toString());
}
catch (FileNotFoundException ex) {
throw new EmbeddedServletContainerException(
@ -345,9 +343,8 @@ public class TomcatEmbeddedServletContainerFactory
private void configureSslTrustStore(AbstractHttp11JsseProtocol<?> protocol, Ssl ssl) {
if (ssl.getTrustStore() != null) {
try {
assertNotClasspathResource(ssl.getTrustStore());
File file = ResourceUtils.getFile(ssl.getTrustStore());
protocol.setTruststoreFile(file.getAbsolutePath());
protocol.setTruststoreFile(
ResourceUtils.getURL(ssl.getTrustStore()).toString());
}
catch (FileNotFoundException ex) {
throw new EmbeddedServletContainerException(
@ -363,14 +360,6 @@ public class TomcatEmbeddedServletContainerFactory
}
}
private void assertNotClasspathResource(String resource)
throws FileNotFoundException {
if (resource.startsWith(ResourceUtils.CLASSPATH_URL_PREFIX)) {
throw new FileNotFoundException("Unable to load '" + resource
+ "' since Tomcat doesn't support classpath resources");
}
}
/**
* Configure the Tomcat {@link Context}.
* @param context the Tomcat context

View File

@ -330,14 +330,19 @@ public abstract class AbstractEmbeddedServletContainerFactoryTests {
}
@Test
public void basicSsl() throws Exception {
public void basicSslFromClassPath() throws Exception {
testBasicSslWithKeyStore("classpath:test.jks");
}
@Test
public void basicSslFromFileSystem() throws Exception {
testBasicSslWithKeyStore("src/test/resources/test.jks");
}
@Test
public void sslDisabled() throws Exception {
AbstractEmbeddedServletContainerFactory factory = getFactory();
Ssl ssl = getSsl(null, "password", "src/test/resources/test.jks");
Ssl ssl = getSsl(null, "password", "classpath:test.jks");
ssl.setEnabled(false);
factory.setSsl(ssl);
this.container = factory.getEmbeddedServletContainer(
@ -393,8 +398,8 @@ public abstract class AbstractEmbeddedServletContainerFactoryTests {
public void pkcs12KeyStoreAndTrustStore() throws Exception {
AbstractEmbeddedServletContainerFactory factory = getFactory();
addTestTxtFile(factory);
factory.setSsl(getSsl(ClientAuth.NEED, null, "src/test/resources/test.p12",
"src/test/resources/test.p12"));
factory.setSsl(getSsl(ClientAuth.NEED, null, "classpath:test.p12",
"classpath:test.p12"));
this.container = factory.getEmbeddedServletContainer();
this.container.start();
KeyStore keyStore = KeyStore.getInstance("pkcs12");
@ -417,8 +422,8 @@ public abstract class AbstractEmbeddedServletContainerFactoryTests {
throws Exception {
AbstractEmbeddedServletContainerFactory factory = getFactory();
addTestTxtFile(factory);
factory.setSsl(getSsl(ClientAuth.NEED, "password", "src/test/resources/test.jks",
"src/test/resources/test.jks"));
factory.setSsl(getSsl(ClientAuth.NEED, "password", "classpath:test.jks",
"classpath:test.jks"));
this.container = factory.getEmbeddedServletContainer();
this.container.start();
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
@ -441,8 +446,7 @@ public abstract class AbstractEmbeddedServletContainerFactoryTests {
throws Exception {
AbstractEmbeddedServletContainerFactory factory = getFactory();
addTestTxtFile(factory);
factory.setSsl(
getSsl(ClientAuth.NEED, "password", "src/test/resources/test.jks"));
factory.setSsl(getSsl(ClientAuth.NEED, "password", "classpath:test.jks"));
this.container = factory.getEmbeddedServletContainer();
this.container.start();
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(
@ -460,8 +464,7 @@ public abstract class AbstractEmbeddedServletContainerFactoryTests {
throws Exception {
AbstractEmbeddedServletContainerFactory factory = getFactory();
addTestTxtFile(factory);
factory.setSsl(
getSsl(ClientAuth.WANT, "password", "src/test/resources/test.jks"));
factory.setSsl(getSsl(ClientAuth.WANT, "password", "classpath:test.jks"));
this.container = factory.getEmbeddedServletContainer();
this.container.start();
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
@ -484,8 +487,7 @@ public abstract class AbstractEmbeddedServletContainerFactoryTests {
throws Exception {
AbstractEmbeddedServletContainerFactory factory = getFactory();
addTestTxtFile(factory);
factory.setSsl(
getSsl(ClientAuth.WANT, "password", "src/test/resources/test.jks"));
factory.setSsl(getSsl(ClientAuth.WANT, "password", "classpath:test.jks"));
this.container = factory.getEmbeddedServletContainer();
this.container.start();
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(

View File

@ -40,7 +40,6 @@ import org.apache.coyote.http11.AbstractHttp11JsseProtocol;
import org.junit.Test;
import org.mockito.InOrder;
import org.springframework.boot.context.embedded.AbstractEmbeddedServletContainerFactoryTests;
import org.springframework.boot.context.embedded.EmbeddedServletContainerException;
import org.springframework.boot.context.embedded.Ssl;
import org.springframework.util.SocketUtils;
@ -316,13 +315,6 @@ public class TomcatEmbeddedServletContainerFactoryTests
}
@Test
public void basicSslClasspathKeyStore() throws Exception {
this.thrown.expect(EmbeddedServletContainerException.class);
this.thrown.expectMessage("Tomcat doesn't support classpath resources");
testBasicSslWithKeyStore("classpath:test.jks");
}
@Test
public void jspServletInitParameters() {
Map<String, String> initParameters = new HashMap<String, String>();