Sono ai primi passi con JSP e sto creando una pagina di login per l’autenticazione, una di quelle banali con username e password che vanno verificate.
A parte impostare il form con method=”POST” mi sono chiesto come abilitare https per offrire una comunicasione sicura. Niente di più semplice, probabilmente nella vostra applicazione web vi ritrovate il web.xml già creato dal vostro IDE e che potete modificare.
Il file web.xml è chiamato deployment descriptor perchè esso descrive come la vostra applicazione composta da diversi file (o risorse) viene raggiunta dall’esterno, non solo in termini di URL ma anche in termini di sicurezza.
Come abbiamo capito il deployment descriptor è un file xml che è descritto da uno schema, l’ultima versione la 2.5 la trovate qui:
http://java.sun.com/xml/ns/javaee
cercate la voce Servlet Deployment Descriptor Schema.
Un semplice esempio lo trovate qui:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
Potete notare la versione 2.5, lo schema web-app_2_5.xsd, il parametro di timeout (0 significa no time out) e il welcome file che contiene il file index.jsp che deve essere il primo ad essere visitato.
Per quanto riguarda la sicurezza, se vogliamo aggiungere la protezione su tutte le risorse e fare in modo che altre entità, terze persone, non vedano il contenuto trasmesso (in altre parole SSL), dovremo aggiungere appena prima del tag </web-app> la seguente configurazione:
<security-constraint>
<web-resource-collection>
<web-resource-name>secure</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
è molto importante sapere che:
- potete specificare più di un security constraint, vedere qui un esempio; nell’esempio potete notare che si può scegliere se applicare la sicurezza al solo metodo POST o GET o a tutti i metodi specificati nel protocollo HTTP 1.1
- l’url-pattern /* indica tutte le pagine che si trovano subito dopo la / nell’URL, potete anche dire /main/* tutte le pagine che si trovano dopo /main/ nella loro url
- il livello CONFIDENTIAL dice che altre entità non possono vedere il messaggio trasmesso, il sotto livello è INTEGRAL per cui il messaggio non può essere modificato in transito e NONE quando non si vuole alcuna garanzia sul trasporto
Ora non dovete far altro che il deploy della stessa applicazione e andare sul link http della vostra applicazione e verrete rediretti su HTTPS (accettando il certificato).
La versione 2.5 è destinata ad essere seguita dalla 3.0 come descritto dalla JSR 315 che introdurrà diversi miglioramenti tra cui l’uso delle annotazioni nelle servlet rendendo vano l’uso del file web.xml, ma tutto cio’ si accadrà su J2EE 6 e quando i diversi servlet-container saranno pronti per interpretarli.

Ciao Emilio, ho seguito le tue indicazioni riguardanti il web.xml per attivare SSL ed ho letto pure la documentazione java. Il mio problema è come faccio a capire se SSL è attivo, o meglio, quando nel mio sito vado a finire in una jsp che ho inserito nel mio /ssl/*, non dovrei vedere nell’URL del browser la dicitura https://…ecc?
Ciao Luca,
in teoria si, dovresti essere rediretto su https se provi ad usare http, ti confesso pero’ che al momento non tocco java.