2013-03-27 13 views
15

Questo è come si nasconde la versione del server in Jetty 8:rimuovere l'intestazione HTTP Server nella Molo 9

Server server = new Server(port); 
server.setSendServerVersion(false); 

Come si fa a farlo in Jetty 9? Quindi ora dovrebbe assomigliare a questo?

HttpConfiguration config = new HttpConfiguration(); 
config.setSendServerVersion(false); 
//TODO: Associate config with server??? 
Server server = new Server(port); 
+0

So che disabilitando l'invio della versione server non è ideale, ma ho uno scenario specifico in cui non posso evitarlo per ora. – Jacob

+1

Perché _sending la versione del server non è ideale_? Voglio dire nessun client dovrebbe usarlo in ogni caso e potrebbe avere implicazioni sulla sicurezza. Secondo me dovrebbe essere disabilitato di default o mi manca qualcosa? –

+0

L'intestazione del server è sicuramente utilizzata, può influire sul ranking della ricerca e viene anche utilizzata per creare grafici di popolarità della tecnologia/browser che vengono spesso utilizzati da determinati tipi di persone per prendere decisioni sulla tecnologia. – Jacob

risposta

22

Se ha funzionato un po 'di codice che sembra funzionare. Non sono sicuro se il suo diritto, ma almeno funziona (:

Server server = new Server(port); 
for(Connector y : server.getConnectors()) { 
    for(ConnectionFactory x : y.getConnectionFactories()) { 
     if(x instanceof HttpConnectionFactory) { 
      ((HttpConnectionFactory)x).getHttpConfiguration().setSendServerVersion(false); 
     } 
    } 
} 
2

C'è ora un oggetto HttpConfiguration con quella impostazione su di esso.

org.eclipse.jetty.server.HttpConfiguration

Guardate al jetty.xml per la sezione nella sezione di configurazione di HTTP che mostra come impostare l'oggetto e quindi il file pontile-http.xml che mostra come tale configurazione si usa. Ricorda che i file jetty xml sono in realtà solo una sottile pellicola su Java e funzionano praticamente allo stesso modo.

http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/tree/jetty-server/src/main/config/etc/jetty.xml

http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/tree/jetty-server/src/main/config/etc/jetty-http.xml

+2

Ho visto questo, ma il problema è che non sto usando un file xml jetty, sto iniziando il Jetty embedded. – Jacob

+0

stessa cosa, basta tradurlo nelle relative chiamate java –

+2

Ho recensito la javadoc e cercata su google ...La classe 'HttpConfiguration' non ha documentazione su come usarla. – Jacob

23

In Molo 9, è necessario configurare sul HttpConfiguration:

HttpConfiguration httpConfig = new HttpConfiguration(); 
httpConfig.setSendServerVersion(false); 
HttpConnectionFactory httpFactory = new HttpConnectionFactory(httpConfig); 
ServerConnector httpConnector = new ServerConnector(server,httpFactory); 
server.setConnectors(new Connector[] { httpConnector }); 
+6

aggiungere l'ultimo passaggio: 'server.setConnectors (nuovo connettore [] {httpConnector});'. –

+2

Il bit importante per impostare la porta per il nuovo connettore è questo: 'httpConnector.setPort (porta);'. Poiché il connettore predefinito viene sostituito, la porta passata al costruttore 'Server' non viene utilizzata. – Ben

1

Alcuni software di analisi di sicurezza sarà la bandiera di inviare la versione del server in l'intestazione di risposta come un problema.

OP era alla ricerca di una soluzione per embedded, ma se la distribuzione Jetty utilizza il file server.ini, si può semplicemente impostare jetty.send.server.version = false

5

Se si utilizza jetty9 come server autonomo, è possibile disabilitare la firma del server impostando jetty.httpConfig.sendServerVersion=false nel file start.ini.

1

variante in stile Lambda della soluzione di Jacob (che ha lavorato per me):

final Server server = new Server(port); 
Stream.of(server.getConnectors()).flatMap(connector -> connector.getConnectionFactories().stream()) 
      .filter(connFactory -> connFactory instanceof HttpConnectionFactory) 
      .forEach(httpConnFactory -> ((HttpConnectionFactory)httpConnFactory).getHttpConfiguration().setSendServerVersion(false)); 
0

in jetty9.2, modificare questa configurazione per false in start.ini

# should jetty send the server version header? 
jetty.send.server.version=true