mirror of
https://github.com/spring-projects/spring-boot.git
synced 2024-09-03 04:26:12 +08:00
Update Tomcat multi-connectors sample to configure SSL declaratively
The documentation recommends configuring the HTTP connector in code and using application.properties to configure the HTTPS connector as it's easier. This commit updates the sample to follow that recommendation. Closes gh-4342
This commit is contained in:
parent
7c1bf58262
commit
05b501ce41
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2014 the original author or authors.
|
||||
* Copyright 2012-2015 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -16,26 +16,20 @@
|
||||
|
||||
package sample.tomcat;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.catalina.connector.Connector;
|
||||
import org.apache.coyote.http11.Http11NioProtocol;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
|
||||
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
import org.springframework.util.FileCopyUtils;
|
||||
import org.springframework.util.SocketUtils;
|
||||
|
||||
/**
|
||||
* Sample Application to show Tomcat running 2 connectors
|
||||
* Sample Application to show Tomcat running two connectors
|
||||
*
|
||||
* @author Brock Mills
|
||||
* @author Andy Wilkinson
|
||||
*/
|
||||
@SpringBootApplication
|
||||
public class SampleTomcatTwoConnectorsApplication {
|
||||
@ -54,37 +48,8 @@ public class SampleTomcatTwoConnectorsApplication {
|
||||
|
||||
private Connector createSslConnector() {
|
||||
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
|
||||
Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();
|
||||
try {
|
||||
File keystore = getKeyStoreFile();
|
||||
File truststore = keystore;
|
||||
connector.setScheme("https");
|
||||
connector.setSecure(true);
|
||||
connector.setPort(port());
|
||||
protocol.setSSLEnabled(true);
|
||||
protocol.setKeystoreFile(keystore.getAbsolutePath());
|
||||
protocol.setKeystorePass("changeit");
|
||||
protocol.setTruststoreFile(truststore.getAbsolutePath());
|
||||
protocol.setTruststorePass("changeit");
|
||||
protocol.setKeyAlias("apitester");
|
||||
return connector;
|
||||
}
|
||||
catch (IOException ex) {
|
||||
throw new IllegalStateException("cant access keystore: [" + "keystore"
|
||||
+ "] or truststore: [" + "keystore" + "]", ex);
|
||||
}
|
||||
}
|
||||
|
||||
private File getKeyStoreFile() throws IOException {
|
||||
ClassPathResource resource = new ClassPathResource("keystore");
|
||||
try {
|
||||
return resource.getFile();
|
||||
}
|
||||
catch (Exception ex) {
|
||||
File temp = File.createTempFile("keystore", ".tmp");
|
||||
FileCopyUtils.copy(resource.getInputStream(), new FileOutputStream(temp));
|
||||
return temp;
|
||||
}
|
||||
connector.setPort(port());
|
||||
return connector;
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
|
@ -0,0 +1,4 @@
|
||||
server.port = 8443
|
||||
server.ssl.key-store = classpath:sample.jks
|
||||
server.ssl.key-store-password = secret
|
||||
server.ssl.key-password = password
|
Binary file not shown.
Binary file not shown.
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2014 the original author or authors.
|
||||
* Copyright 2012-2015 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -46,9 +46,10 @@ import org.springframework.web.client.RestTemplate;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
/**
|
||||
* Basic integration tests for 2 connector demo application.
|
||||
* Basic integration tests for {@link SampleTomcatTwoConnectorsApplication}.
|
||||
*
|
||||
* @author Brock Mills
|
||||
* @author Andy Wilkinson
|
||||
*/
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
@SpringApplicationConfiguration(classes = SampleTomcatTwoConnectorsApplication.class)
|
||||
@ -109,14 +110,14 @@ public class SampleTomcatTwoConnectorsApplicationTests {
|
||||
});
|
||||
template.setRequestFactory(factory);
|
||||
|
||||
ResponseEntity<String> entity = template
|
||||
.getForEntity("http://localhost:" + this.port + "/hello", String.class);
|
||||
ResponseEntity<String> entity = template.getForEntity(
|
||||
"http://localhost:" + this.context.getBean("port") + "/hello",
|
||||
String.class);
|
||||
assertEquals(HttpStatus.OK, entity.getStatusCode());
|
||||
assertEquals("hello", entity.getBody());
|
||||
|
||||
ResponseEntity<String> httpsEntity = template.getForEntity(
|
||||
"https://localhost:" + this.context.getBean("port") + "/hello",
|
||||
String.class);
|
||||
ResponseEntity<String> httpsEntity = template
|
||||
.getForEntity("https://localhost:" + this.port + "/hello", String.class);
|
||||
assertEquals(HttpStatus.OK, httpsEntity.getStatusCode());
|
||||
assertEquals("hello", httpsEntity.getBody());
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user