2012-10-02 7 views
7

Sto provando a configurare un server HTTP minimale su SPDY con Jetty, a scopo di test. Sto lavorando su questo codice:SPDY "Hello server" con Jetty

import java.io.IOException; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.eclipse.jetty.server.Connector; 
import org.eclipse.jetty.server.Server; 
import org.eclipse.jetty.spdy.http.HTTPSPDYServerConnector; 
import org.eclipse.jetty.util.ssl.SslContextFactory; 

import org.eclipse.jetty.server.Request; 
import org.eclipse.jetty.server.handler.AbstractHandler; 

public class MySPDYHelloServer { 
    public static void main(String[] args) throws Exception { 
     Server server = new Server(); 

     SslContextFactory sslFactory = new SslContextFactory(); 
     sslFactory.setKeyStorePath("dummy_keystore.jks"); 
     sslFactory.setKeyStorePassword("password"); 
     sslFactory.setProtocol("TLSv1"); 

     Connector connector = new HTTPSPDYServerConnector(sslFactory); 
     connector.setPort(8443); 
     server.addConnector(connector); 

     server.setHandler(new AbstractHandler(){ 
      public void handle(String target, Request baseRequest, 
        HttpServletRequest request, HttpServletResponse response) 
        throws IOException, ServletException { 
       response.setContentType("text/html;charset=utf-8"); 
       response.setStatus(HttpServletResponse.SC_OK); 
       baseRequest.setHandled(true); 
       response.getWriter().println("<h1>Hello World</h1>"); 
      } 
     }); 

     server.start(); 
     server.join(); 
    } 
} 

ho generato il keystore con:

keytool -genkey -keystore dummy_keystore.jks 

Quando indico Google Chrome (SPDY abilitato) per https://localhost:8443 mi avverte circa il certificato non attendibile poi carichi per sempre.

Gli esempi di server client SPDY puri (da here) funzionano e anche un semplice server HTTPS funziona; il problema sembra correlato alla classe HTTPSPDYServerConnector.

Ecco l'elenco dei JAR che sto usando:

jetty-all-7.6.7.v20120910.jar 
npn-boot-7.6.2.v20120308.jar 
servlet-api-2.5.jar 
spdy-core-7.6.7.v20120910.jar 
spdy-jetty-7.6.7.v20120910.jar 
spdy-jetty-http-7.6.7.v20120910.jar 

E per quello che riguarda il mio ambiente Java:

$ cat /opt/jdk1.7.0_07/release 
JAVA_VERSION="1.7.0" 
OS_NAME="Linux" 
OS_VERSION="2.6" 
OS_ARCH="i586" 

Soluzione addendum

jesse mcconnell a condizione che il answer, in ogni caso chi usa Eclipse può trovare utile quanto segue.

il vaso npn-boot-7.6.2.v20120308.jar mosto (anche) essere collocati in:

Run Configurations... -> Classpath -> Bootstrap Entries -> Add External JARs 

Nota che, dal momento ordine conta, quella voce deve apparire prima il JRE System Library.

risposta

6

Si sta utilizzando npn-boot come un jar bootclasspath all'avvio di questo?

L'archivio jvm non supporterà npn (la successiva negoziazione del protocollo) e spdy non funzionerà, quindi è necessario assicurarsi che il jar npn-boot venga utilizzato insieme all'opzione -Xbootclasspath. Il tipo suona come il tuo problema da quando hai a che fare con il caricamento dei certificati e poi il suo stallo ... anche che fai riferimento a npn-boot come dipendenza quando è più una sostituzione delle classi jvm che una tipica dipendenza.

+0

Oh, ho appena lanciato tutti i JAR nel percorso di classe di Eclipse ... molte grazie! – cYrus