2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property.
7 * Modifications Copyright (C) 2019 IBM.
8 * ================================================================================
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 * ============LICENSE_END=========================================================
23 package org.onap.dmaap.dbcapi.server;
26 import org.eclipse.jetty.server.*;
27 import org.eclipse.jetty.servlet.DefaultServlet;
28 import org.eclipse.jetty.servlet.ServletContextHandler;
29 import org.eclipse.jetty.servlet.ServletHolder;
30 import org.eclipse.jetty.util.ssl.SslContextFactory;
31 import org.onap.dmaap.dbcapi.logging.BaseLoggingClass;
33 import java.util.Properties;
35 * A Jetty server which supports:
36 * - http and https (simultaneously for dev env)
38 * - static html pages (for documentation).
40 public class JettyServer extends BaseLoggingClass {
41 private Server server;
44 public Server getServer() {
48 public JettyServer( Properties params ) throws Exception {
50 server = new Server();
51 int httpPort = Integer.valueOf(params.getProperty("IntHttpPort", "80" ));
52 int sslPort = Integer.valueOf(params.getProperty("IntHttpsPort", "443" ));
53 boolean allowHttp = Boolean.valueOf(params.getProperty("HttpAllowed", "false"));
54 serverLogger.info( "port params: http=" + httpPort + " https=" + sslPort );
55 serverLogger.info( "allowHttp=" + allowHttp );
58 HttpConfiguration http_config = new HttpConfiguration();
59 http_config.setSecureScheme("https");
60 http_config.setSecurePort(sslPort);
61 http_config.setOutputBufferSize(32768);
65 try(ServerConnector httpConnector = new ServerConnector(server, new HttpConnectionFactory(http_config))) {
66 httpConnector.setPort(httpPort);
67 httpConnector.setIdleTimeout(30000);
72 HttpConfiguration https_config = new HttpConfiguration(http_config);
73 https_config.addCustomizer(new SecureRequestCustomizer());
74 SslContextFactory sslContextFactory = new SslContextFactory();
76 setUpKeystore(params, sslContextFactory);
77 setUpTrustStore(params, sslContextFactory);
80 try(ServerConnector sslConnector = new ServerConnector(server,
81 new SslConnectionFactory(sslContextFactory, "http/1.1"),
82 new HttpConnectionFactory(https_config))) {
83 sslConnector.setPort(sslPort);
85 logger.info("Starting httpConnector on port " + httpPort);
86 logger.info("Starting sslConnector on port " + sslPort + " for https");
87 server.setConnectors(new Connector[]{httpConnector, sslConnector});
89 logger.info("NOT starting httpConnector because HttpAllowed param is " + allowHttp);
90 logger.info("Starting sslConnector on port " + sslPort + " for https");
91 server.setConnectors(new Connector[]{sslConnector});
95 serverLogger.info("NOT starting sslConnector on port " + sslPort + " for https");
97 serverLogger.info("Starting httpConnector on port " + httpPort);
98 server.setConnectors(new Connector[]{httpConnector});
103 // Set context for servlet. This is shared for http and https
104 ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
105 context.setContextPath("/");
106 server.setHandler( context );
108 ServletHolder jerseyServlet = context.addServlet( org.glassfish.jersey.servlet.ServletContainer.class, "/webapi/*");
109 jerseyServlet.setInitOrder(1);
110 jerseyServlet.setInitParameter("jersey.config.server.provider.packages", "org.onap.dmaap.dbcapi.resources" );
111 jerseyServlet.setInitParameter("javax.ws.rs.Application", "org.onap.dmaap.dbcapi.server.ApplicationConfig" );
113 // also serve up some static pages...
114 ServletHolder staticServlet = context.addServlet(DefaultServlet.class,"/*");
115 staticServlet.setInitParameter("resourceBase","www");
116 staticServlet.setInitParameter("pathInfoOnly","true");
120 serverLogger.info("Starting jetty server");
121 String unit_test = params.getProperty("UnitTest", "No");
122 serverLogger.info("UnitTest=" + unit_test);
123 if ( unit_test.equals( "No" ) ) {
128 } catch ( Exception e ) {
129 errorLogger.error( "Exception " + e );
136 private void setUpKeystore(Properties params, SslContextFactory sslContextFactory) {
137 String keystore = params.getProperty("KeyStoreFile", "etc/keystore");
138 logger.info("https Server using keystore at " + keystore);
139 sslContextFactory.setKeyStorePath(keystore);
140 sslContextFactory.setKeyStoreType(params.getProperty("KeyStoreType", "jks"));
141 sslContextFactory.setKeyStorePassword(params.getProperty("KeyStorePassword", "changeit"));
142 sslContextFactory.setKeyManagerPassword(params.getProperty("KeyPassword", "changeit"));
145 private void setUpTrustStore(Properties params, SslContextFactory sslContextFactory) {
146 String truststore = params.getProperty("TrustStoreFile", "etc/org.onap.dmaap-bc.trust.jks");
147 logger.info("https Server using truststore at " + truststore);
148 sslContextFactory.setTrustStorePath(truststore);
149 sslContextFactory.setTrustStoreType(params.getProperty("TrustStoreType", "jks"));
150 sslContextFactory.setTrustStorePassword(params.getProperty("TrustStorePassword", "changeit"));