]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms.lib.equinox/src/org/argeo/equinox/jetty/CmsJettyCustomizer.java
Support web socket over SSL
[lgpl/argeo-commons.git] / org.argeo.cms.lib.equinox / src / org / argeo / equinox / jetty / CmsJettyCustomizer.java
1 package org.argeo.equinox.jetty;
2
3 import java.util.Dictionary;
4
5 import javax.servlet.ServletContext;
6 import javax.websocket.DeploymentException;
7 import javax.websocket.server.ServerContainer;
8
9 import org.eclipse.equinox.http.jetty.JettyCustomizer;
10 import org.eclipse.jetty.server.ConnectionFactory;
11 import org.eclipse.jetty.server.ServerConnector;
12 import org.eclipse.jetty.server.SslConnectionFactory;
13 import org.eclipse.jetty.servlet.ServletContextHandler;
14 import org.eclipse.jetty.util.ssl.SslContextFactory;
15 import org.eclipse.jetty.websocket.javax.server.config.JavaxWebSocketServletContainerInitializer;
16 import org.eclipse.jetty.websocket.javax.server.config.JavaxWebSocketServletContainerInitializer.Configurator;
17 import org.osgi.framework.BundleContext;
18 import org.osgi.framework.FrameworkUtil;
19
20 /** Customises the Jetty HTTP server. */
21 public class CmsJettyCustomizer extends JettyCustomizer {
22 static final String SSL_TRUSTSTORE = "ssl.truststore";
23 static final String SSL_TRUSTSTOREPASSWORD = "ssl.truststorepassword";
24 static final String SSL_TRUSTSTORETYPE = "ssl.truststoretype";
25
26 private BundleContext bc = FrameworkUtil.getBundle(CmsJettyCustomizer.class).getBundleContext();
27
28 public final static String WEBSOCKET_ENABLED = "argeo.websocket.enabled";
29
30 @Override
31 public Object customizeContext(Object context, Dictionary<String, ?> settings) {
32 // WebSocket
33 Object webSocketEnabled = settings.get(WEBSOCKET_ENABLED);
34 if (webSocketEnabled != null && webSocketEnabled.toString().equals("true")) {
35 ServletContextHandler servletContextHandler = (ServletContextHandler) context;
36 JavaxWebSocketServletContainerInitializer.configure(servletContextHandler, new Configurator() {
37
38 @Override
39 public void accept(ServletContext servletContext, ServerContainer serverContainer)
40 throws DeploymentException {
41 bc.registerService(javax.websocket.server.ServerContainer.class, serverContainer, null);
42 }
43 });
44 }
45 return super.customizeContext(context, settings);
46
47 }
48
49 @Override
50 public Object customizeHttpsConnector(Object connector, Dictionary<String, ?> settings) {
51 ServerConnector httpsConnector = (ServerConnector) connector;
52 if (httpsConnector != null)
53 for (ConnectionFactory connectionFactory : httpsConnector.getConnectionFactories()) {
54 if (connectionFactory instanceof SslConnectionFactory) {
55 SslContextFactory.Server sslContextFactory = ((SslConnectionFactory) connectionFactory)
56 .getSslContextFactory();
57 sslContextFactory.setTrustStorePath((String) settings.get(SSL_TRUSTSTORE));
58 sslContextFactory.setTrustStoreType((String) settings.get(SSL_TRUSTSTORETYPE));
59 sslContextFactory.setTrustStorePassword((String) settings.get(SSL_TRUSTSTOREPASSWORD));
60 }
61 }
62 return super.customizeHttpsConnector(connector, settings);
63 }
64
65 }