2011-10-18 10 views
8

Sono un principiante nello sviluppo web basato su Spring.Come sviluppare il sito https con Spring 3.x?

Il nostro sito è basato sulla primavera ed è attualmente basato su http (quindi abbastanza insicuro). Dal momento che, il sito non è ancora vivo, stiamo inviando login/password anche attraverso una normale richiesta di JSON al server ed hanno focalizzato soprattutto su JSP, progettazione dell'interfaccia utente, le query SQL ecc

Ora, vogliamo passare a fuoco sulla sicurezza e passare a https come primo passo.

Ho letto un no. di pagine Web e alcuni libri di primavera, ma nessuno sembra fornire una risposta chiara su come Spring può essere utilizzata per fornire la sicurezza https. Qualcuno può aiutarmi a realizzare quanto sopra?

Per favore fatemi sapere se la mia domanda non è chiara. Proverò ad aggiungere ulteriori dettagli al più presto.

nostro web.xml è la seguente:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
xmlns:mvc="http://www.springframework.org/schema/mvc" 
xsi:schemaLocation=" 
    http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd 
    http://www.springframework.org/schema/mvc 
    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd  
" 
id="WebApp_ID" version="2.5"> 

<display-name>Spring3MVC</display-name> 
<welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
</welcome-file-list> 

<servlet> 
    <servlet-name>spring</servlet-name> 
    <servlet-class> 
     org.springframework.web.servlet.DispatcherServlet 
    </servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>spring</servlet-name> 
    <url-pattern>*.html</url-pattern> 
</servlet-mapping> 

<!--> Mapping for serving static web-content <--> 
<!--> The resources folder must be in parallel to WEB-INF <--> 
<!--> The mvc:resources gives "not bound" exception unless bound to a namespace as above for xmlns:mvc <--> 
<mvc:resources mapping="/resources/**" location="/resources/" /> 
<mvc:resources mapping="/scripts/**" location="/scripts/" /> 

</web-app> 

C'è un solo controller in questo momento per il quale, la primavera-servlet.xml è la seguente:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

<context:component-scan 
    base-package="console.controllerpkg" /> 

<bean id="viewResolver" 
    class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
    <property name="viewClass" 
     value="org.springframework.web.servlet.view.JstlView" /> 
    <property name="prefix" value="/WEB-INF/jsp/" /> 
    <property name="suffix" value=".jsp" /> 
</bean> 

</beans> 

Grazie mille in anticipo !

P.S. Se mi puoi consigliare un buon sito/libro basato su un esempio in primavera, sarebbe molto apprezzato. La maggior parte dei siti/libri che ho visto pongono molta enfasi sulla teoria, ma solo pochi esempi. Questo mi ha lasciato un po 'confuso.

risposta

12

Come dice Dave, è necessario configurare il contenitore per servire SSL e quindi distribuire l'app di primavera in quel contenitore. Scopri sulla configurazione Tomcat for SSL.

In alternativa, e in modo più flessibile possibile front your container using Apache, e enable SSL there.

+0

Grazie per i collegamenti nont. Li attraverserò domani da quando è a tarda notte per me. Solo per riconfermare ciò che è stato risposto fino ad ora, ho capito che: 1) La primavera non ha nulla a che fare con SSL. 2) SSL deve essere abilitato in Tomcat. Si prega di confermare questi due punti. Grazie ancora per le vostre risposte ragazzi. Avrei continuato a scavare Spring se voi ragazzi non mi aveste aiutato. –

+0

Corretto, spring non gestisce direttamente HTTP o HTTPS. È distribuito in un contenitore come tomcat o jboss e quel contenitore è ciò che si occupa di SSL o di HTTP regolare. Queste richieste vengono quindi passate a Spring per essere gestite. Quindi, sì, se vuoi abilitare SSL, dovresti farlo nel tuo tomcat. A proposito, si prega di upvote e/o contrassegnare questa risposta come corretta se fosse utile. Questa è una grande ragione per cui alla gente piace rispondere alle domande qui! – nont

+0

Il collegamento nella risposta è per Tomcat 5.5, questo è il collegamento per Tomcat 7: http://tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html – maxivis

4

Spring non è responsabile al 100% della configurazione di SSL. Per questo è necessario configurare il contenitore (jetty, tomcat, ecc.) Per gestire SSL.

0

Configurare due siti web diversi, uno per HTTP e una per https, quello per http avrà solo un redirect al sito https .

3

Grazie per tutto l'aiuto ragazzi. Ripeterò quello che ho fatto solo per i miei scopi personali.

Prima di tutto, il collegamento fornito da nont su "Tomcat per SSL" è stato davvero utile. ho letto tutto su SSL e Tomcat lì e questo è quello che ho fatto:

Al prompt dei comandi, digitare: keytool -genkey -alias Tomcat -keyalg RSA Il comando precedente mi ha chiesto alcune semplici domande necessarie per un certificato. Ho usato la password 'changeit' ovunque richiesto (dato che questa è la password predefinita).

Sul finire con il comando di cui sopra, ha generato un file di archivio chiavi in ​​C:./Documents and Settings // chiavi ho copiato questo file .keystore Tomcat/conf/myKeyStore.jks

Poi ho aggiunto il seguendo a conf/server.xml:

<Connector protocol="org.apache.coyote.http11.Http11Protocol" 
    port="8443" minSpareThreads="5" 
    maxSpareThreads="75" 
    enableLookups="true" 
    disableUploadTimeout="true" 
    acceptCount="100" 
    maxThreads="200" debug="5" 
    scheme="https" secure="true" SSLEnabled="true" 
    keystoreFile="${catalina.home}/conf/myKeyStore.jks" 
    keystoreType="JKS" keystorePass="changeit" 
    truststoreFile="${catalina.home}/conf/cacerts" 
    truststoreType="JKS" truststorePass="changeit" 
    SSLVerifyClient="require" SSLEngine="on" SSLVerifyDepth="2" 
    sslProtocol="TLS" /> 

E questo è tutto !! La prossima volta, ho eseguito tomcat il mio vecchio collegamento http non ha funzionato. Poi ho provato ad aggiungere sweet 's' a http con un numero di porta di 8443 e lo! tutto funzionava di nuovo.

Grazie non per il link meraviglioso !!

+1

Solo un'ultima cosa, dopo aver abilitato SSL per il mio server web, posso essere sicuro che la sicurezza per il mio sito è completa? O devo fare anche qualcos'altro? Ad esempio, faccio molte chiamate AJAX per ottenere dati per tutte le mie pagine. E il server restituisce le risposte JSON a ciascuna chiamata Ajax. È ok? Analogamente durante il login, viene effettuata una richiesta di post AJAX con nome utente e password in formato JSON. È sicuro? –

+1

tutto ciò che passa attraverso il tomcat abilitato per ssl verrà crittografato se l'url inizia con "https". non importa se è ajax o no. sembra che tu abbia generato il tuo certificato personale? se è così, potresti voler comprare un certificato "reale" quando vai in produzione. non che sarà più sicuro, solo perché i browser degli utenti li metteranno in guardia dai siti Web che utilizzano certificati autofirmati. – nont

Problemi correlati