1 package nl.altindag.ssl;
2
3 import com.sun.net.httpserver.HttpExchange;
4 import com.sun.net.httpserver.HttpHandler;
5 import com.sun.net.httpserver.HttpsConfigurator;
6 import com.sun.net.httpserver.HttpsParameters;
7 import com.sun.net.httpserver.HttpsServer;
8
9 import java.io.IOException;
10 import java.io.OutputStream;
11 import java.net.InetSocketAddress;
12 import java.nio.charset.StandardCharsets;
13 import java.util.concurrent.Executor;
14
15 public final class ServerUtils {
16
17 private ServerUtils() {}
18
19 public static HttpsServer createServer(int port, SSLFactory sslFactory, Executor executor, String payload) throws IOException {
20 InetSocketAddress socketAddress = new InetSocketAddress(port);
21 HttpsServer server = HttpsServer.create(socketAddress, 0);
22 server.setExecutor(executor);
23 server.setHttpsConfigurator(new HttpsConfigurator(sslFactory.getSslContext()) {
24 @Override
25 public void configure(HttpsParameters params) {
26 params.setSSLParameters(sslFactory.getSslParameters());
27 }
28 });
29
30 class HelloWorldController implements HttpHandler {
31 @Override
32 public void handle(HttpExchange exchange) throws IOException {
33 try (OutputStream responseBody = exchange.getResponseBody()) {
34
35 exchange.getResponseHeaders().set("Content-Type", "text/plain");
36
37 exchange.sendResponseHeaders(200, payload.length());
38 responseBody.write(payload.getBytes(StandardCharsets.UTF_8));
39 }
40 }
41 }
42 server.createContext("/api/hello", new HelloWorldController());
43 return server;
44 }
45
46 }