+ All Categories
Home > Documents > Web – services

Web – services

Date post: 02-Jan-2016
Category:
Upload: nita-mcclain
View: 19 times
Download: 0 times
Share this document with a friend
Description:
Web – services. Andrea Manconi IASC group DIEE – D epartement of E letrical and E letronic E ngineering [email protected]. Sommario. Web services Web application (CGI, FastCGI, ASP, JSP,PHP) Servlet vs CGI, FastCGI, ASP, JSP,PHP Servlet – persistenza Servlet – caching - PowerPoint PPT Presentation
Popular Tags:
124
Web – services Web – services Andrea Manconi Andrea Manconi IASC group IASC group DIEE – DIEE – D D epartement of epartement of E E letrical and letrical and E E letronic letronic E E ngineering ngineering [email protected] [email protected]
Transcript
Page 1: Web – services

Web – servicesWeb – services

Andrea ManconiAndrea ManconiIASC groupIASC group

DIEE – DIEE – DDepartement of epartement of EEletrical and letrical and EEletronic letronic EEngineeringngineering

[email protected]@diee.unica.it

Page 2: Web – services

Andrea ManconiAndrea Manconi

SommarioSommario

Web servicesWeb services Web application (CGI, FastCGI, ASP, Web application (CGI, FastCGI, ASP,

JSP,PHP)JSP,PHP) Servlet vs CGI, FastCGI, ASP, JSP,PHPServlet vs CGI, FastCGI, ASP, JSP,PHP Servlet – persistenzaServlet – persistenza Servlet – cachingServlet – caching Servlet – contenuto HTMLServlet – contenuto HTML Servlet – sessioniServlet – sessioni Servlet – sicurezzaServlet – sicurezza Distribuzione di caricoDistribuzione di carico

Page 3: Web – services

Web serviceWeb service

Page 4: Web – services

Andrea ManconiAndrea Manconi

Web serviceWeb service

Per web service si intende un servizio Per web service si intende un servizio offerto attraverso il web.offerto attraverso il web.

Esempio: richiesta informazioni Esempio: richiesta informazioni prodotto catalogo. Si invia una prodotto catalogo. Si invia una richiestarichiesta ad un dato URL e il servizio ad un dato URL e il servizio risponderisponde fornendo le informazioni fornendo le informazioni richieste.richieste.

Page 5: Web – services

Andrea ManconiAndrea Manconi

Web serviceWeb service

Web page: statica. Non esiste Web page: statica. Non esiste iterazioneiterazione

Web application: dinamica. Iterazione Web application: dinamica. Iterazione con l’utentecon l’utente

Page 6: Web – services

Web applicationWeb application

Page 7: Web – services

Andrea ManconiAndrea Manconi

Web applicationWeb application

CGICGI FastCGIFastCGI ASPASP JSPJSP PHPPHP Java ServletJava Servlet

Page 8: Web – services

Andrea ManconiAndrea Manconi

Web application - CGIWeb application - CGI

Common Gateway InterfaceCommon Gateway Interface Una delle prime tecnologie utilizzateUna delle prime tecnologie utilizzate Nata per definire un metodo standard Nata per definire un metodo standard

per la comunicazione tra un server di per la comunicazione tra un server di informazioni e applicazioni esterneinformazioni e applicazioni esterne

Ciclo di vita: pessimo, un nuovo Ciclo di vita: pessimo, un nuovo processo per ogni richiesta (tempo e processo per ogni richiesta (tempo e risorse del server)risorse del server)

Page 9: Web – services

Andrea ManconiAndrea Manconi

Web application - CGIWeb application - CGI

VantaggiVantaggi Semplice da scrivereSemplice da scrivere PortabilitàPortabilità Supporta molti linguaggi: es. C, PerlSupporta molti linguaggi: es. C, Perl

Page 10: Web – services

Andrea ManconiAndrea Manconi

Web application - CGIWeb application - CGI

SvantaggiSvantaggi Prestazioni limitatePrestazioni limitate Impossibilità di interazione con il server Impossibilità di interazione con il server

web a causa dei processi separati (es. web a causa dei processi separati (es. non è possibile scrivere sul file log del non è possibile scrivere sul file log del server)server)

Page 11: Web – services

Andrea ManconiAndrea Manconi

Web application - CGIWeb application - CGIHelloWorld.cgi (Perl)HelloWorld.cgi (Perl)

#!/usr/bin/perl #!/usr/bin/perl $t = "Hello World!"; $t = "Hello World!"; print <<EOT; print <<EOT; Content-type: text/html Content-type: text/html <Title> $t </Title> <Title> $t </Title> <H1> $t </H1><H1> $t </H1> EOTEOT

Page 12: Web – services

Andrea ManconiAndrea Manconi

Web application - Web application - FastCGIFastCGI

FastCGIFastCGI Sviluppata da Open MarketSviluppata da Open Market Elimina la necessità di creare un Elimina la necessità di creare un

nuovo processo per ogni richiesta nuovo processo per ogni richiesta pervenutapervenuta

Tuttavia è necessario attivare almeno Tuttavia è necessario attivare almeno un processo per ogni programma un processo per ogni programma FastCGIFastCGI

Page 13: Web – services

Andrea ManconiAndrea Manconi

Web application - Web application - FastCGIFastCGI VantaggiVantaggi

SempliceSemplice Facile migrare da applicazioni CGI ad Facile migrare da applicazioni CGI ad

applicazioni FastCGIapplicazioni FastCGI Alte performance (rispetto a CGI)Alte performance (rispetto a CGI) Molti linguaggi supportatiMolti linguaggi supportati

Page 14: Web – services

Andrea ManconiAndrea Manconi

Web application - Web application - FastCGIFastCGI SvantaggiSvantaggi

è necessario attivare almeno un è necessario attivare almeno un processo per ogni programma FastCGI, processo per ogni programma FastCGI, se un programma FastCGI deve gestire se un programma FastCGI deve gestire richieste concorrenti saranno attivati più richieste concorrenti saranno attivati più processiprocessi

continua a mancare l’interazione con il continua a mancare l’interazione con il serverserver

Page 15: Web – services

Andrea ManconiAndrea Manconi

Web application - ASPWeb application - ASP

Active Server PagesActive Server Pages Sviluppato da MicrosoftSviluppato da Microsoft Pagina HTML con codice incorporato Pagina HTML con codice incorporato

(in genere VBScript e JScript)(in genere VBScript e JScript) Problema: in piattaforma non Problema: in piattaforma non

Windows potrebbero sorgere problemi Windows potrebbero sorgere problemi legati all’assenza della libreria COM di legati all’assenza della libreria COM di WindowsWindows

Page 16: Web – services

Andrea ManconiAndrea Manconi

Web application - ASPWeb application - ASP

VantaggiVantaggi Facile da usareFacile da usare Ottimizzato per piccoli contenuti Ottimizzato per piccoli contenuti

dinamicidinamici

Page 17: Web – services

Andrea ManconiAndrea Manconi

Web application - ASPWeb application - ASP

SvantaggiSvantaggi Portabilità: Portabilità:

1) il supporto ASP è contenuto in Microsoft 1) il supporto ASP è contenuto in Microsoft Internet Information Server 3.0, disponibile Internet Information Server 3.0, disponibile gratuitamente, mentre il supporto per altri gratuitamente, mentre il supporto per altri server web è disponibile come prodotto server web è disponibile come prodotto commercialecommerciale

2) su piattaforme non Windows problemi 2) su piattaforme non Windows problemi legati all’assenza della libreria COMlegati all’assenza della libreria COM

Page 18: Web – services

Andrea ManconiAndrea Manconi

Web application - ASPWeb application - ASPHelloWorld.aspHelloWorld.asp<HTML><HTML>

<BODY><BODY><% For i = 3 To 7 %><% For i = 3 To 7 %>    <FONT SIZE="   <FONT SIZE="<% = i %><% = i %>">Hello World!">Hello World!

<BR> <BR> <% Next %><% Next %> </BODY> </BODY> </HTML></HTML>

Page 19: Web – services

Andrea ManconiAndrea Manconi

Web application - ASPWeb application - ASP

Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!

Page 20: Web – services

Andrea ManconiAndrea Manconi

Web application - JSPWeb application - JSP

Java Server PagesJava Server Pages Alternativa ad ASP basata su JavaAlternativa ad ASP basata su Java Sviluppata da SUNSviluppata da SUN Forte legame con le servletForte legame con le servlet

Page 21: Web – services

Andrea ManconiAndrea Manconi

Web application - JSPWeb application - JSP

VantaggiVantaggi Standard: implementato da moltissimi Standard: implementato da moltissimi

produttori su tutte le piattaformeproduttori su tutte le piattaforme Semplice passare da ASP a JSP per chi Semplice passare da ASP a JSP per chi

conosce JAVAconosce JAVA

Page 22: Web – services

Andrea ManconiAndrea Manconi

Web application - JSPWeb application - JSP

SvantaggiSvantaggi Un solo linguaggio di script: JAVAUn solo linguaggio di script: JAVA Ottimizzato per piccoli contenuti Ottimizzato per piccoli contenuti

dinamicidinamici

Page 23: Web – services

Andrea ManconiAndrea Manconi

Web application - JSPWeb application - JSP

HelloWorld.jspHelloWorld.jsp

<HTML><HTML>

<BODY> <BODY>

Hello World! The time is now Hello World! The time is now <%=new <%=new java.util.Date() %>java.util.Date() %>

</BODY> </BODY>

</HTML> </HTML>

Page 24: Web – services

Andrea ManconiAndrea Manconi

Web application - PHPWeb application - PHP

È un linguaggio di scripting open-È un linguaggio di scripting open-source per la creazione di contenuti source per la creazione di contenuti dinamicidinamici

Il codice PHP viene scritto come Il codice PHP viene scritto come codice embedded all’interno delle codice embedded all’interno delle pagine HTMLpagine HTML

Page 25: Web – services

Andrea ManconiAndrea Manconi

Web application - PHPWeb application - PHPHelloWorld.phpHelloWorld.php

/* void echo ( string arg1 [, string argn...]) *//* void echo ( string arg1 [, string argn...]) */

__________________________________________________________________________________<html> <html>

<head> <head> <title>Test PHP</title> <title>Test PHP</title>

</head> </head> <body><body>

<?php echo "Hello World!<p>"; ?> <?php echo "Hello World!<p>"; ?> </body> </body> </html> </html>

Page 26: Web – services

Andrea ManconiAndrea Manconi

Web application - PHPWeb application - PHP

Interfaccia verso i più comuni Interfaccia verso i più comuni database (oracle, MySQL …)database (oracle, MySQL …)

Sintassi simile a quella del C e di PerlSintassi simile a quella del C e di Perl Cross-platform compatibility: Cross-platform compatibility:

significa che gli script PHP sono significa che gli script PHP sono supportati da tutti gli Internet serverssupportati da tutti gli Internet servers

Page 27: Web – services

Andrea ManconiAndrea Manconi

Web application - PHPWeb application - PHP

Vantaggi:Vantaggi: Open – source !!!Open – source !!! Non è proprietario, e quindi non è Non è proprietario, e quindi non è

ristretto a determinate piattaformeristretto a determinate piattaforme Facile da utilizzareFacile da utilizzare

Page 28: Web – services

Andrea ManconiAndrea Manconi

Web application - PHPWeb application - PHP

SvantaggiSvantaggi Forte consumo di memoria da parte Forte consumo di memoria da parte

dell’interprete (variabili non dell’interprete (variabili non necessariamente dichiarate)necessariamente dichiarate)

Page 29: Web – services

Andrea ManconiAndrea Manconi

Web application - ServletWeb application - Servlet

ServletServlet E’ pensabile come ad una estensione E’ pensabile come ad una estensione

che è possibile collegare ad un server che è possibile collegare ad un server al fine di migliorarne ed estenderne le al fine di migliorarne ed estenderne le funzionalità. funzionalità.

L’esecuzione avviene all’interno di una L’esecuzione avviene all’interno di una JVM e pertanto è sicura e portabileJVM e pertanto è sicura e portabile

Page 30: Web – services

Andrea ManconiAndrea Manconi

Web application - ServletWeb application - Servlet

Tutte le servlet vengono gestite da Tutte le servlet vengono gestite da thread separati all’interno dello thread separati all’interno dello stesso processostesso processo

Portabilità: sia rispetto ai sistemi Portabilità: sia rispetto ai sistemi operativi, sia verso i server weboperativi, sia verso i server web

Page 31: Web – services

Andrea ManconiAndrea Manconi

Web application - ServletWeb application - Servlet

Le servlet operano all’interno del Le servlet operano all’interno del dominio del server, pertanto a dominio del server, pertanto a differenza delle applet non differenza delle applet non richiedono che il browser supporti richiedono che il browser supporti JAVAJAVA

Page 32: Web – services

Andrea ManconiAndrea Manconi

Servlet vs CGIServlet vs CGI

Servlet sono una soluzione Sun alle Servlet sono una soluzione Sun alle CGICGI

Entrambi generano contenuti dinamiciEntrambi generano contenuti dinamici Le Servlet sono sicureLe Servlet sono sicure Le Servlet sono indipendenti dalla Le Servlet sono indipendenti dalla

piattaformapiattaforma Le Servlet hanno un migliore supporto Le Servlet hanno un migliore supporto

per i componenti riusabiliper i componenti riusabili

Page 33: Web – services

Andrea ManconiAndrea Manconi

Servlet vs CGIServlet vs CGI

Servlet: vantaggiServlet: vantaggi associate a thread del web server, non a associate a thread del web server, non a

processi separatiprocessi separati Servlet: svantaggiServlet: svantaggi

Possono essere scritte esclusivamente Possono essere scritte esclusivamente in Javain Java

Page 34: Web – services

Andrea ManconiAndrea Manconi

Servlet vs CGIServlet vs CGI

L’esecuzione di una CGI è indipendente L’esecuzione di una CGI è indipendente dalle altre. La comunicazione tra diverse dalle altre. La comunicazione tra diverse istanze è complessaistanze è complessa

Una servlet è sempre in esecuzione e la Una servlet è sempre in esecuzione e la comunicazione tra i vari thread è comunicazione tra i vari thread è semplificatasemplificata

Un processo per ogni richiesta. Ad n Un processo per ogni richiesta. Ad n richieste n copie dell’applicazione in richieste n copie dell’applicazione in memoriamemoria

Page 35: Web – services

Andrea ManconiAndrea Manconi

Servlet vs CGIServlet vs CGI

ServletServlet CGI CGI ScriptsScripts

CreazioneCreazione MediaMedia MediaMedia

Efficienza di Efficienza di esecuzioneesecuzione

AltaAlta BassaBassa

Indipendenza Indipendenza dalla piattaformadalla piattaforma

Molto altaMolto alta MediaMedia

Page 36: Web – services

Andrea ManconiAndrea Manconi

Servlet vs FastCGIServlet vs FastCGI

Servlet: gestione semplificata delle Servlet: gestione semplificata delle sessionisessioni

FastCGI: possibilità di scelta tra più FastCGI: possibilità di scelta tra più linguaggilinguaggi

Servlet: PORTABILITA’Servlet: PORTABILITA’

Page 37: Web – services

Andrea ManconiAndrea Manconi

Servlet vs ASPServlet vs ASP

Le Servlet sono portabili verso Le Servlet sono portabili verso altri sistemi operativi altri sistemi operativi web serverweb server

Le Servlet sono più potenti per Le Servlet sono più potenti per applicazioni complesseapplicazioni complesse

Migliore supporto per componenti Migliore supporto per componenti riusabili riusabili

Page 38: Web – services

Andrea ManconiAndrea Manconi

Servlet vs JSPServlet vs JSP

Esiste una forte relazione tra le servlet Esiste una forte relazione tra le servlet e JSPe JSP

Servlet: codice JAVA che legge e Servlet: codice JAVA che legge e scrive HTMLscrive HTML

JSP: HTML con codice JAVA JSP: HTML con codice JAVA embeddedembedded

Page 39: Web – services

Andrea ManconiAndrea Manconi

Servlet vs PHPServlet vs PHP

Java è ottimo per progetti complessiJava è ottimo per progetti complessi Librerie Librerie PHP utilizza i cookie ma non ha una PHP utilizza i cookie ma non ha una

gestione delle sessionigestione delle sessioni

Page 40: Web – services

Andrea ManconiAndrea Manconi

Web serverWeb server WebSphere (IBM)WebSphere (IBM)

http://www-3.ibm.com/software/info1/websphere/index.jsphttp://www-3.ibm.com/software/info1/websphere/index.jsp

WebLogic (BEA)WebLogic (BEA) http://www.bea.comhttp://www.bea.com

9i Application Server (Oracle)9i Application Server (Oracle) http://www.oracle.com/ip/deploy/ias/http://www.oracle.com/ip/deploy/ias/

Jrun (Allaire) Jrun (Allaire) www.allaire.com/products/jrunwww.allaire.com/products/jrun

Sun Java Web ServerSun Java Web Server www.sun.com/software/jwebserver/trywww.sun.com/software/jwebserver/try

Tomcat (Apache)Tomcat (Apache) http://jakarta.apache.orghttp://jakarta.apache.org

Page 41: Web – services

ServletServlet

Page 42: Web – services

Andrea ManconiAndrea Manconi

J2EEJ2EE

J2EE raccoglie diverse API lato serverJ2EE raccoglie diverse API lato server Servlet APIServlet API JSPJSP EJBEJB JavaMailJavaMail JMS (Java Messaging Service)JMS (Java Messaging Service) JTA (Java Transactions)JTA (Java Transactions) CorbaCorba JDBCJDBC JAXP (Java API for XML Parsing)JAXP (Java API for XML Parsing) JNDI (Java Naming and Directory Interface)JNDI (Java Naming and Directory Interface)

Page 43: Web – services

PersistenzaPersistenza

Page 44: Web – services

Andrea ManconiAndrea Manconi

PersistenzaPersistenza

Nel momento in cui il codice di una Nel momento in cui il codice di una servlet viene caricato, il server crea servlet viene caricato, il server crea una singola istanza, per gestire tutte una singola istanza, per gestire tutte le richieste.le richieste.

Page 45: Web – services

Andrea ManconiAndrea Manconi

PersistenzaPersistenza

Vantaggi:Vantaggi: Ridotto consumo di memoriaRidotto consumo di memoria Riduzione del carico di lavoro, altrimenti Riduzione del carico di lavoro, altrimenti

necessario per creare un nuovo oggetto necessario per creare un nuovo oggetto ad ogni richiestaad ogni richiesta

Permette la persistenzaPermette la persistenza

Page 46: Web – services

Andrea ManconiAndrea Manconi

PersistenzaPersistenza

Cosa si intende per persistenza ?Cosa si intende per persistenza ?

Le web application fanno in genere Le web application fanno in genere riferimento ad un db. Si immagini cosa riferimento ad un db. Si immagini cosa significa stabilire una connessione al db significa stabilire una connessione al db per ogni richiesta che viene effettuata. È per ogni richiesta che viene effettuata. È evidente il vantaggio della persistenza evidente il vantaggio della persistenza della connessione con una singolo della connessione con una singolo istanza della servlet che gestisce la istanza della servlet che gestisce la connessione.connessione.

Page 47: Web – services

Andrea ManconiAndrea Manconi

PersistenzaPersistenza

import java.io.*;import java.io.*;import javax.servlet.*;import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.http.*;

public class SimpleCounter extends HttpServlet {public class SimpleCounter extends HttpServlet {

int count = 0; int count = 0;

public void doGet(HttpServletRequest req, HttpServletResponse public void doGet(HttpServletRequest req, HttpServletResponse res)res)

throws ServletException, IOException {throws ServletException, IOException { res.setContentType("text/plain");res.setContentType("text/plain"); PrintWriter out = res.getWriter();PrintWriter out = res.getWriter(); count++;count++; out.println(“Numero di accessi: " + count);out.println(“Numero di accessi: " + count); }}}}

Page 48: Web – services

Andrea ManconiAndrea Manconi

PersistenzaPersistenza

Problema:Problema:

se si utilizzano variabili locali non se si utilizzano variabili locali non esistono problemi di interazione tra i esistono problemi di interazione tra i thread, ma se si utilizzano variabili thread, ma se si utilizzano variabili non locali …non locali …

Page 49: Web – services

Andrea ManconiAndrea Manconi

PersistenzaPersistenza

Si consideri contatore mostrato in Si consideri contatore mostrato in precedenza, cosa accade se due precedenza, cosa accade se due utenti accedono alla servlet quasi utenti accedono alla servlet quasi contemporaneamente ?contemporaneamente ?

Entrambi i thread saranno colpevoli Entrambi i thread saranno colpevoli di incrementare lo stesso valore del di incrementare lo stesso valore del contatore, mostrando a video lo contatore, mostrando a video lo stesso risultato.stesso risultato.

Page 50: Web – services

Andrea ManconiAndrea Manconi

PersistenzaPersistenza

Il problema è dovuto alla necessità di Il problema è dovuto alla necessità di sincronizzare l’utilizzo della variabile sincronizzare l’utilizzo della variabile count, in modo che un thread alla count, in modo che un thread alla volta possa operare su essa.volta possa operare su essa.

In java questo viene fatto utilizzando In java questo viene fatto utilizzando la parola chiave la parola chiave synchronizedsynchronized

Page 51: Web – services

Andrea ManconiAndrea Manconi

PersistenzaPersistenza

Possibili soluzioni:Possibili soluzioni:

public syncronized void public syncronized void doGet(HttpServletRequest req, doGet(HttpServletRequest req, HttpServletResponse res) …HttpServletResponse res) …

Page 52: Web – services

Andrea ManconiAndrea Manconi

PersistenzaPersistenza

Un’altra soluzione …Un’altra soluzione …

PrintWriter out = res.getWriter();PrintWriter out = res.getWriter();

syncronized(this) syncronized(this) {{

count++;count++;

out.println(“Numero di accessi” + out.println(“Numero di accessi” + count);count);

} }

Page 53: Web – services

Andrea ManconiAndrea Manconi

PersistenzaPersistenza

Problematiche legate:Problematiche legate: L’utilizzo della sincronizzazione L’utilizzo della sincronizzazione

(monitor) implica un carico elevato(monitor) implica un carico elevato Nel periodo in cui un thread esegue un Nel periodo in cui un thread esegue un

blocco syncronized gli altri thread blocco syncronized gli altri thread possono essere bloccati in attesa del possono essere bloccati in attesa del rilascio delle risorse !!!rilascio delle risorse !!!

Page 54: Web – services

Andrea ManconiAndrea Manconi

PersistenzaPersistenza

Altre problematiche: Altre problematiche:

cosa accade se il server “cade”, cosa accade se il server “cade”, oppure se per qualche motivo è oppure se per qualche motivo è necessario ricaricare la servlet ?necessario ricaricare la servlet ?

Page 55: Web – services

Andrea ManconiAndrea Manconi

PersistenzaPersistenza

… … il contatore inizia a contare da zeroil contatore inizia a contare da zero

Page 56: Web – services

Andrea ManconiAndrea Manconi

PersistenzaPersistenza

Metodi init() e destroy()Metodi init() e destroy()

il metodo init() definisce le operazioni il metodo init() definisce le operazioni di inizializzazione della servlet, quelle di inizializzazione della servlet, quelle che devono essere effettuate al che devono essere effettuate al momento del suo caricamento, momento del suo caricamento, mentre il metodo destroy() mentre il metodo destroy() implementa le operazioni per la implementa le operazioni per la distruzione della servlet.distruzione della servlet.

Page 57: Web – services

Andrea ManconiAndrea Manconi

PersistenzaPersistenza

Con l’utilizzo di questi due metodi, il Con l’utilizzo di questi due metodi, il problema del contatore può essere risolto problema del contatore può essere risolto facilmente interfacciandoci con un db o facilmente interfacciandoci con un db o con l’utilizzo di un file. con l’utilizzo di un file.

init(): inizializzazione del contatore a zero init(): inizializzazione del contatore a zero al primo accesso in assoluto o lettura del al primo accesso in assoluto o lettura del suo valore da file o dbsuo valore da file o db

destroy(): memorizzazione del nuovo destroy(): memorizzazione del nuovo valore del contatorevalore del contatore

Page 58: Web – services

Andrea ManconiAndrea Manconi

PersistenzaPersistenza

Singolo threadSingolo thread Esiste la possibilità di caricare per una Esiste la possibilità di caricare per una

servlet un pool di istanze. Non tutti i servlet un pool di istanze. Non tutti i server permettono di fare questo.server permettono di fare questo.

È necessario che la servlet implementi È necessario che la servlet implementi l’interfaccia l’interfaccia javax.servlet.SingleThreadModel (è javax.servlet.SingleThreadModel (è un’interfaccia vuota !!!)un’interfaccia vuota !!!)

Page 59: Web – services

CachingCaching

Page 60: Web – services

Andrea ManconiAndrea Manconi

CachingCaching

Molti browser per ridurre il tempo di Molti browser per ridurre il tempo di acceso ad una pagina web accedono acceso ad una pagina web accedono alla loro copia in cache.alla loro copia in cache.

Dal punto di vista delle web-Dal punto di vista delle web-application questo “vantaggio” può application questo “vantaggio” può essere un grosso problema !!! Infatti essere un grosso problema !!! Infatti si scontra con l’histrory del client.si scontra con l’histrory del client.

Page 61: Web – services

Andrea ManconiAndrea Manconi

CachingCaching

Si pensi ad un sistema di e-commerce in cui Si pensi ad un sistema di e-commerce in cui esistono due pagine, una pagina che mostra esistono due pagine, una pagina che mostra il carrello e una pagina dei prodotti in il carrello e una pagina dei prodotti in catalogo. Se ogni volta che l’utente carica catalogo. Se ogni volta che l’utente carica un nuovo prodotto nel carrello il browser un nuovo prodotto nel carrello il browser ricarica la sua copia nella cache della ricarica la sua copia nella cache della pagina che mostra il carrello, invece di pagina che mostra il carrello, invece di inoltrare la richiesta al web server, l’utente inoltrare la richiesta al web server, l’utente non avrà visione di quello che decide di non avrà visione di quello che decide di acquistareacquistare

Page 62: Web – services

Andrea ManconiAndrea Manconi

CachingCaching

La maggior parte dei server web, La maggior parte dei server web, restituisce, ad ogni richiesta, un restituisce, ad ogni richiesta, un intestazione intestazione LastModifiedLastModified : :

Sun, 07-Jul-1974 01:10:00 GMTSun, 07-Jul-1974 01:10:00 GMT

Lato browser web, viene inclusa nella Lato browser web, viene inclusa nella propria richiesta un’intestazione propria richiesta un’intestazione identica identica IfModifiedSinceIfModifiedSince..

Page 63: Web – services

Andrea ManconiAndrea Manconi

CachingCaching

Dallo scambio di queste informazioni Dallo scambio di queste informazioni il server decide se re-inviare una il server decide se re-inviare una pagina più recente oppure no. In pagina più recente oppure no. In quest’ultimo caso: codice di stato quest’ultimo caso: codice di stato 304 Not Modified304 Not Modified

Page 64: Web – services

Andrea ManconiAndrea Manconi

CachingCaching

Nel caso di contenuto dinamico (servlet) Nel caso di contenuto dinamico (servlet) è cosa buona e giusta che il server è cosa buona e giusta che il server assuma che il contenuto cambi in assuma che il contenuto cambi in continuazione. continuazione.

Questo implica lo svantaggio di dovere Questo implica lo svantaggio di dovere effettivamente ricaricare le pagine effettivamente ricaricare le pagine dinamiche lato client, e carico di lavoro dinamiche lato client, e carico di lavoro lato server, ma previene da eventuali lato server, ma previene da eventuali malfunzionamenti !!!malfunzionamenti !!!

Page 65: Web – services

Andrea ManconiAndrea Manconi

CachingCaching

Per impostare il ricaricamento delle pagine, Per impostare il ricaricamento delle pagine, la servlet può implementare il metodola servlet può implementare il metodo

protected long protected long getLastModified(HttpServletRequest)getLastModified(HttpServletRequest)

Il server interroga questo metodo per Il server interroga questo metodo per scoprire quando è stata l’ultima volta che la scoprire quando è stata l’ultima volta che la servlet ha modificato il suo outputservlet ha modificato il suo output..

Page 66: Web – services

Contenuto HTMLContenuto HTML

Page 67: Web – services

Andrea ManconiAndrea Manconi

Contenuto HTMLContenuto HTML

Principalmente una servlet scrive Principalmente una servlet scrive codice HTML dinamico. Una servlet codice HTML dinamico. Una servlet contiene “HTML embedded” !!!contiene “HTML embedded” !!!

Page 68: Web – services

Andrea ManconiAndrea Manconi

Contenuto HTMLContenuto HTML

private void privateArea ( HttpServletRequest request, HttpServletResponse response) private void privateArea ( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{throws ServletException, IOException{

String sqlCommand;String sqlCommand; PrintWriter out = response.getWriter();PrintWriter out = response.getWriter(); try{try{ sqlCommand = "SELECT * FROM shop ORDER BY shopid";sqlCommand = "SELECT * FROM shop ORDER BY shopid"; acs.rs = acs.stmt.executeQuery(sqlCommand);acs.rs = acs.stmt.executeQuery(sqlCommand); out.printlnout.println("<HTML"+("<HTML"+ "<HEAD><TITLE>Comune di Sestu - E-commerce - Sestu "<HEAD><TITLE>Comune di Sestu - E-commerce - Sestu

2010</TITLE></HEAD>\n"+2010</TITLE></HEAD>\n"+ "<BODY bgcolor='#FFFFFF' text='#666666' link='#3366FF' "<BODY bgcolor='#FFFFFF' text='#666666' link='#3366FF'

vlink='#CCCCCC'ALINK='#666666'>\n"+vlink='#CCCCCC'ALINK='#666666'>\n"+ "<FONT FACE='VERDANA' size=+1>\n"+"<FONT FACE='VERDANA' size=+1>\n"+ "<TABLE ALIGN='CENTER' BORDER='0'>\n"+"<TABLE ALIGN='CENTER' BORDER='0'>\n"+ "<TR>\n"+"<TR>\n"+ "<TD ALIGN='CENTER' COLSPAN='2'>\n"+"<TD ALIGN='CENTER' COLSPAN='2'>\n"+ "<FONT SIZE=+2> Area Privata. Solo autorizzati\n"+"<FONT SIZE=+2> Area Privata. Solo autorizzati\n"+ "</TD>\n"+"</TD>\n"+ "</TR>\n"+"</TR>\n"+

Page 69: Web – services

Andrea ManconiAndrea Manconi

Acquisire contenuto dai Acquisire contenuto dai formform

In una web application spesso risulta In una web application spesso risulta necessario acquisire informazioni necessario acquisire informazioni dall’utente. Si pensi al classico dall’utente. Si pensi al classico servizio di registrazione utente.servizio di registrazione utente.

Page 70: Web – services

Andrea ManconiAndrea Manconi

Acquisire contenuto dai Acquisire contenuto dai formform"<FORM METHOD=POST ACTION="+response.encodeURL("/IndexServlet/CustomerServlet?"<FORM METHOD=POST ACTION="+response.encodeURL("/IndexServlet/CustomerServlet?

registercustomer=")+">\n"+registercustomer=")+">\n"+ "<TABLE BORDER='0' cellspacing='0' cellpadding='1' BGCOLOR='#4A7B99' "<TABLE BORDER='0' cellspacing='0' cellpadding='1' BGCOLOR='#4A7B99'

ALIGN='CENTER'>\n"+ALIGN='CENTER'>\n"+ "<TR>\n"+"<TR>\n"+ "<TD ALIGN='CENTER' COLSPAN='2' BGCOLOR='#CCCCCC'><FONT SIZE='4' "<TD ALIGN='CENTER' COLSPAN='2' BGCOLOR='#CCCCCC'><FONT SIZE='4'

COLOR='#4A7B99'>Compila il modulo di registrazione</FONT></TD>\n"+COLOR='#4A7B99'>Compila il modulo di registrazione</FONT></TD>\n"+ "</TR>\n"+"</TR>\n"+ "<TR>\n"+"<TR>\n"+ "<TD ALIGN='RIGHT'><FONT COLOR='#E78A27'>User name:</FONT></TD><TD> <INPUT "<TD ALIGN='RIGHT'><FONT COLOR='#E78A27'>User name:</FONT></TD><TD> <INPUT

TYPE="+"text"TYPE="+"text"+ + "name="+"userid"+""name="+"userid"+" MAXLENGTH="+"10"+"></TD>\n"+ MAXLENGTH="+"10"+"></TD>\n"+ "</TR>\n"+"</TR>\n"+ "<TR>\n"+"<TR>\n"+ "<TD ALIGN='RIGHT'><FONT COLOR='#E78A27'>Password:</FONT></TD><TD> <INPUT "<TD ALIGN='RIGHT'><FONT COLOR='#E78A27'>Password:</FONT></TD><TD> <INPUT

TYPE="+"password"TYPE="+"password"+ + "name="+"newpswid""name="+"newpswid"+"></TD>\n"++"></TD>\n"+ "</TR>\n"+"</TR>\n"+ "<TR>\n"+ "<TD ALIGN='RIGHT'><FONT COLOR='#E78A27'>Ridigitare la "<TR>\n"+ "<TD ALIGN='RIGHT'><FONT COLOR='#E78A27'>Ridigitare la

password:</FONT></TD><TD> <INPUT TYPE="+"password"+ " name="+"newpswid2"+"></TD>\password:</FONT></TD><TD> <INPUT TYPE="+"password"+ " name="+"newpswid2"+"></TD>\n"+n"+

"</TR>\n"+"</TR>\n"+ "<TR>\n"+ "<TR>\n"+ "<TD ALIGN='RIGHT'><FONT COLOR='#E78A27'>Nome:</FONT></TD><TD> <INPUT "<TD ALIGN='RIGHT'><FONT COLOR='#E78A27'>Nome:</FONT></TD><TD> <INPUT

TYPE="+"text"+ TYPE="+"text"+ " name="+"firstname"" name="+"firstname"+"></TD>\n"++"></TD>\n"+ "</TR>\n"+"</TR>\n"+ "<TR>\n"+"<TR>\n"+

Page 71: Web – services

Andrea ManconiAndrea Manconi

Acquisire contenuto dai Acquisire contenuto dai formformpublic public StringString getParametergetParameter((StringString name) name)

il metodo permette di acquisire i valori il metodo permette di acquisire i valori associati al campo del form individuato dal associati al campo del form individuato dal parametro “name”.parametro “name”.

Il metodo è definito dall’interfaccia Il metodo è definito dall’interfaccia javax.servlet.javax.servlet.ServletRequestServletRequest ed è ed è ereditato da ereditato da javax.servlet.javax.servlet.HttpServletRequestHttpServletRequest

Page 72: Web – services

Andrea ManconiAndrea Manconi

Acquisire contenuto dai Acquisire contenuto dai formformsqlCommand = "INSERT INTO custinfo VALUES “+ sqlCommand = "INSERT INTO custinfo VALUES “+

"('"+request.getParameter(""('"+request.getParameter("useriduserid")+")+"',"',MD5MD5('"+request.getParameter("('"+request.getParameter("newpswidnewpswid")")+"'),+"'),'“+request.getParameter("'“+request.getParameter("firstnamefirstname")+"'"+")+"'"+

Page 73: Web – services

Session trackingSession tracking

Page 74: Web – services

Andrea ManconiAndrea Manconi

Session trackingSession tracking

HTTP: è stateless, cioè non permette HTTP: è stateless, cioè non permette la memorizzazione di una sequenza la memorizzazione di una sequenza di richieste, o meglio non permette di di richieste, o meglio non permette di associare questa sequenza ad un associare questa sequenza ad un dato utente.dato utente.

Page 75: Web – services

Andrea ManconiAndrea Manconi

Session trackingSession tracking

Esempio: si pensi all’applicazione e-Esempio: si pensi all’applicazione e-commerce. E’ necessario memorizzare commerce. E’ necessario memorizzare lo stato per “ricordare” l’history lo stato per “ricordare” l’history dell’utente !!!!dell’utente !!!!

Page 76: Web – services

Andrea ManconiAndrea Manconi

Session trackingSession tracking

Autenticazione utente: Autenticazione utente:

processo che porta a riconoscere un client tramite user processo che porta a riconoscere un client tramite user name e una password, con l’aiuto del metodoname e una password, con l’aiuto del metodo

String getRemoteUser() String getRemoteUser()

metodo definito nella classe HttpServletRequest metodo definito nella classe HttpServletRequest

E’ possibile dare l’accesso ad alcune risorse solo a utenti E’ possibile dare l’accesso ad alcune risorse solo a utenti identificati da user name e password noti.identificati da user name e password noti.

Page 77: Web – services

Andrea ManconiAndrea Manconi

Session trackingSession tracking

VantaggiVantaggi Facile da realizzareFacile da realizzare Indipendente dalla macchina dalla quale si Indipendente dalla macchina dalla quale si

connetteconnette

SvantaggiSvantaggi Registrazione obbligatoriaRegistrazione obbligatoria Login obbligatorioLogin obbligatorio Logout solo disconnettendosi dal browserLogout solo disconnettendosi dal browser

Page 78: Web – services

Andrea ManconiAndrea Manconi

Session trackingSession tracking

Cookie: Cookie:

è un’informazione inviata al browser è un’informazione inviata al browser da un server web. Quando riceve un da un server web. Quando riceve un cookie lo salva e poi lo rinvia al cookie lo salva e poi lo rinvia al server ogni volta che accede a una server ogni volta che accede a una pagina su di esso.pagina su di esso.

Page 79: Web – services

Andrea ManconiAndrea Manconi

Session trackingSession tracking

Un cookie ha un nome, un valore, e Un cookie ha un nome, un valore, e alcuni attributi facoltativi come una alcuni attributi facoltativi come una descrizione, una data di scadenza, un descrizione, una data di scadenza, un numero di versione e così via.numero di versione e così via.

Page 80: Web – services

Andrea ManconiAndrea Manconi

Session trackingSession tracking

I cookie vengono ritrasmessi verso il I cookie vengono ritrasmessi verso il server HTTP ogni volta che:server HTTP ogni volta che:

il cookie non è scadutoil cookie non è scaduto il dominio che interroghiamo è il il dominio che interroghiamo è il

dominio di persistenza del cookiedominio di persistenza del cookie

Page 81: Web – services

Andrea ManconiAndrea Manconi

Session trackingSession tracking

Limitazioni: i browser accettanoLimitazioni: i browser accettano 20 cookie per sito20 cookie per sito 300 cookie per utente300 cookie per utente 4096 byte per cookie4096 byte per cookie

Page 82: Web – services

Andrea ManconiAndrea Manconi

Session trackingSession tracking

Le servlet API definiscono la classe Le servlet API definiscono la classe javax.servlet.http.Cookiejavax.servlet.http.Cookie per la per la gestione dei cookiegestione dei cookie

Una servlet recupera Una servlet recupera tuttitutti i cookie che i cookie che ha inviato attraverso il metodoha inviato attraverso il metodo

public Cookie[] public Cookie[] HttpServletRequest.getCookies()HttpServletRequest.getCookies()

Page 83: Web – services

Andrea ManconiAndrea Manconi

Session trackingSession tracking

Per default i cookie sono restituiti Per default i cookie sono restituiti solo all’host che li ha salvatisolo all’host che li ha salvati

È possibile impostare la scadenza per È possibile impostare la scadenza per un cookie utilizzando il metodoun cookie utilizzando il metodo

public void Cookie.setMaxAge(int public void Cookie.setMaxAge(int expiry)expiry)

Page 84: Web – services

Andrea ManconiAndrea Manconi

Session trackingSession tracking

VantaggiVantaggi Anonimo e trasparenteAnonimo e trasparente

SvantaggiSvantaggi Fortemente legato alla macchina, i Fortemente legato alla macchina, i

cookie sono memorizzati su disco !!!cookie sono memorizzati su disco !!! Il browser può non supportare i cookieIl browser può non supportare i cookie

Page 85: Web – services

Andrea ManconiAndrea Manconi

Session trackingSession tracking

Servlet Session TrackingServlet Session Tracking Quando un utente accede ad una web Quando un utente accede ad una web

application gli viene assegnato un ID unico application gli viene assegnato un ID unico di sessionedi sessione

L’ID di sessione viene salvato sul client in L’ID di sessione viene salvato sul client in un cookie chiamato JSESSIONID. Se il client un cookie chiamato JSESSIONID. Se il client non supporta i cookie, l’ID di sessione viene non supporta i cookie, l’ID di sessione viene inviato come parte di un URL modificato. inviato come parte di un URL modificato.

La session può essere invalidata con la La session può essere invalidata con la chiusura del browser o impostando un chiusura del browser o impostando un timeout per la sessione.timeout per la sessione.

Page 86: Web – services

Andrea ManconiAndrea Manconi

Session trackingSession tracking

Un’HttpSession è ottenibile tramite la Un’HttpSession è ottenibile tramite la HttpServletRequestHttpServletRequest

public void doPost(HttpServletRequest public void doPost(HttpServletRequest req,HttpServletResponse res) req,HttpServletResponse res) {{

……..

HttpSession session HttpSession session = = req.getSession(true);req.getSession(true);

}}

Page 87: Web – services

Andrea ManconiAndrea Manconi

Session trackingSession tracking

Per la gestione degli oggettiPer la gestione degli oggetti

public voi setAttribute(String name, Object public voi setAttribute(String name, Object value)value)

public Object getAttribute(String name)public Object getAttribute(String name)

public void removeAttribute(String name)public void removeAttribute(String name)

Page 88: Web – services

SicurezzaSicurezza

Page 89: Web – services

Andrea ManconiAndrea Manconi

SicurezzaSicurezza

Autenticazione: Autenticazione: identificare il clientidentificare il client

Autorizzazione: Autorizzazione: limitare l’accesso alle risorse ad un insieme limitare l’accesso alle risorse ad un insieme selezionato di utentiselezionato di utenti

Riservatezza:Riservatezza:garanzia che soltanto le parti coinvolte possano garanzia che soltanto le parti coinvolte possano comprendere la comunicazionecomprendere la comunicazione

Integrità:Integrità:garantire che il contenuto della comunicazione non è garantire che il contenuto della comunicazione non è mutato durante la trasmissionemutato durante la trasmissione

Page 90: Web – services

Andrea ManconiAndrea Manconi

SicurezzaSicurezza

Autenticazione HTTP: detta Autenticazione HTTP: detta autenticazione di base.autenticazione di base.Basato su un semplice modello Basato su un semplice modello challenge/response – challenge/response – username/password.username/password.Il server web mantiene un database di Il server web mantiene un database di username e password e identifica quali username e password e identifica quali risorse devono essere protette tramite il risorse devono essere protette tramite il meccanismo di autenticazione utente. meccanismo di autenticazione utente.

Page 91: Web – services

Andrea ManconiAndrea Manconi

Sicurezza – Autenticazione Sicurezza – Autenticazione HTTPHTTP

Codifica Base64 per la trasmissione Codifica Base64 per la trasmissione delle password (facilmente delle password (facilmente reversibile)reversibile)

Password scritte in chiaro sul serverPassword scritte in chiaro sul server

Page 92: Web – services

Andrea ManconiAndrea Manconi

Sicurezza – Autenticazione Sicurezza – Autenticazione HTTPHTTP<?xml version="1.0" encoding="ISO-8859-1" ?> <?xml version="1.0" encoding="ISO-8859-1" ?>     <!DOCTYPE web-app<!DOCTYPE web-app (View Source for full doctype...) (View Source for full doctype...)> > <web-app><web-app>

<servlet><servlet>    <servlet-name><servlet-name>secretsecret</servlet-name></servlet-name>     <servlet-class><servlet-class>SalaryServerSalaryServer</servlet-class></servlet-class>     </servlet></servlet>

<security-constraint><security-constraint>

<web-resource-collection><web-resource-collection>

   <web-resource-name><web-resource-name>SecretProtectionSecretProtection</web-resource-name</web-resource-name> >     <url-pattern><url-pattern>/servlet/SalaryServer/servlet/SalaryServer</url-pattern></url-pattern>     <url-pattern><url-pattern>/servlet/secret/servlet/secret</url-pattern></url-pattern>     <http-method>GET</http-method> <http-method>GET</http-method>     <http-method>POST</http-method> <http-method>POST</http-method>

    </web-resource-collection></web-resource-collection>

Page 93: Web – services

Andrea ManconiAndrea Manconi

Sicurezza – Autenticazione Sicurezza – Autenticazione HTTPHTTP

<auth-constraint><auth-constraint>    <role-name>manager</role-name> <role-name>manager</role-name>

</auth-constraint></auth-constraint>  </security-constraint></security-constraint>

<login-config><login-config> <auth-method><auth-method>    BASIC <!-- BASIC, DIGEST, FORM, CLIENT-CERT   --> BASIC <!-- BASIC, DIGEST, FORM, CLIENT-CERT   -->     </auth-method></auth-method> <realm-name><realm-name>   Default <!-- optional, only useful for BASIC   --> Default <!-- optional, only useful for BASIC   -->   </realm-name></realm-name>  </login-config></login-config> <security-role><security-role>   <role-name>manager</role-name> <role-name>manager</role-name>   </security-role></security-role> </web-app></web-app>

Page 94: Web – services

Andrea ManconiAndrea Manconi

Sicurezza – Autenticazione Sicurezza – Autenticazione HTTPHTTP

<security-constraint><security-constraint> protegge un protegge un elemento elemento <web-resource-collection><web-resource-collection> in in modo da consentire l’accesso solo ai ruoli modo da consentire l’accesso solo ai ruoli indicati da indicati da <auth-constraint>.<auth-constraint>.

Se non è specificata alcuna voce Se non è specificata alcuna voce <http-<http-method>method> vengono protetti tutti i metodi vengono protetti tutti i metodi HTTP.HTTP.

La metodologia di autenticazione è La metodologia di autenticazione è specificata da specificata da <auth-method><auth-method>..

Page 95: Web – services

Andrea ManconiAndrea Manconi

Sicurezza – Autenticazione Sicurezza – Autenticazione HTTPHTTP Il file utilizzato per l’autenticazione HTTPIl file utilizzato per l’autenticazione HTTP (con tomcat web server (con tomcat web server tomcat-users.xmltomcat-users.xml))

<tomcat-users><tomcat-users>    <user name="Dilbert" password="dnrc" <user name="Dilbert" password="dnrc"

roles="engineer" /> roles="engineer" />     <user name="Wally" password="iluvalice“ <user name="Wally" password="iluvalice“

roles="engineer,slacker" /> roles="engineer,slacker" />     <user name="MrPointyHair" password="MrPointyHair" <user name="MrPointyHair" password="MrPointyHair"

roles="manager,slacker" /> roles="manager,slacker" /> </tomcat-users></tomcat-users>

Page 96: Web – services

Andrea ManconiAndrea Manconi

Sicurezza – Autenticazione Sicurezza – Autenticazione HTTPHTTP Recupero parametri di autenticazioneRecupero parametri di autenticazione

public String HttpServletRequest.getRemoteUser()public String HttpServletRequest.getRemoteUser()/* restituisce il nome dell’utente che effettua la richiesta /* restituisce il nome dell’utente che effettua la richiesta

*/*/public String HttpServletRequest.getAuthType()public String HttpServletRequest.getAuthType()/* restituisce il tipo di autorizzazione usata *//* restituisce il tipo di autorizzazione usata */public boolean public boolean

HttpServletRequest.isUserInRole(String role)HttpServletRequest.isUserInRole(String role)/* restituisce true solo se l’utente autenticato appartiene /* restituisce true solo se l’utente autenticato appartiene

al ruolo specificato */al ruolo specificato */

Page 97: Web – services

Andrea ManconiAndrea Manconi

Sicurezza – Autenticazione Sicurezza – Autenticazione basata su modulobasata su modulo

A differenza della autenticazione A differenza della autenticazione base, permette di entrare nel sito con base, permette di entrare nel sito con una pagina di login documentata.una pagina di login documentata.

Come per l’autenticazione base anche Come per l’autenticazione base anche in questo caso le password sono in in questo caso le password sono in chiaro sul server e facilmente chiaro sul server e facilmente individuabili.individuabili.

Page 98: Web – services

Andrea ManconiAndrea Manconi

Sicurezza – Autenticazione Sicurezza – Autenticazione basata su modulobasata su modulo

Vengono impostate due pagine Vengono impostate due pagine HTML, una per il login corretto e una HTML, una per il login corretto e una pagina di errore.pagina di errore.

Le pagine sono indicate nel web.xmlLe pagine sono indicate nel web.xml

Page 99: Web – services

Andrea ManconiAndrea Manconi

Sicurezza – Autenticazione Sicurezza – Autenticazione basata su modulobasata su modulo<?xml version="1.0" encoding="ISO-8859-1" ?> <?xml version="1.0" encoding="ISO-8859-1" ?>    <!DOCTYPE web-app<!DOCTYPE web-app (View Source for full doctype...) (View Source for full doctype...)> > <web-app><web-app> <servlet><servlet>   <servlet-name><servlet-name>secretsecret</servlet-name> </servlet-name>    <servlet-class><servlet-class>SalaryServerSalaryServer</servlet-class> </servlet-class>    </servlet></servlet> <security-constraint><security-constraint> <web-resource-collection><web-resource-collection>   <web-resource-name><web-resource-name>SecretProtectionSecretProtection</web-resource-name> </web-resource-name>    <url-pattern><url-pattern>/servlet/SalaryServer/servlet/SalaryServer</url-pattern> </url-pattern>    <url-pattern><url-pattern>/servlet/secret/servlet/secret</url-pattern> </url-pattern>    <http-method><http-method>GETGET</http-method> </http-method>    <http-method><http-method>POSTPOST</http-method> </http-method>    </web-resource-collection></web-resource-collection>

Page 100: Web – services

Andrea ManconiAndrea Manconi

Sicurezza – Autenticazione Sicurezza – Autenticazione basata su modulobasata su modulo<auth-constraint><auth-constraint>   <role-name><role-name>managermanager</role-name> </role-name>    </auth-constraint></auth-constraint>   </security-constraint></security-constraint><login-config><login-config> <auth-method><auth-method>   FORMFORM <!-- BASIC, DIGEST, FORM, CLIENT-CERT <!-- BASIC, DIGEST, FORM, CLIENT-CERT    --> -->    </auth-method></auth-method> <form-login-config> <!-- only useful for FORM <form-login-config> <!-- only useful for FORM    --> -->    <form-login-page>/loginpage.html</form-login-page> <form-login-page>/loginpage.html</form-login-page>     <form-error-page>/errorpage.html</form-error-page> <form-error-page>/errorpage.html</form-error-page>    </form-login-config></form-login-config>   </login-config></login-config> <security-role><security-role>   <role-name><role-name>managermanager</role-name> </role-name>    </security-role></security-role>   </web-app> </web-app>

Page 101: Web – services

Andrea ManconiAndrea Manconi

Sicurezza – Autenticazione Sicurezza – Autenticazione personalizzatapersonalizzata

Sfrutta l’autenticazione HTTPSfrutta l’autenticazione HTTP Potenzialità: Potenzialità:

gestione all’accesso di una servlet gestione all’accesso di una servlet (user/password)(user/password)

gestione all’accesso di una risorsa in base gestione all’accesso di una risorsa in base alla nazione di appartenenza (vedi alla nazione di appartenenza (vedi embargo)embargo)

gestione dell’accesso ad una risorsa in gestione dell’accesso ad una risorsa in base all’IPbase all’IP

Page 102: Web – services

Andrea ManconiAndrea Manconi

Sicurezza – Autenticazione Sicurezza – Autenticazione personalizzatapersonalizzata L’autenticazione personalizzata fa in L’autenticazione personalizzata fa in

genere riferimento a password genere riferimento a password memorizzate in scuro su file o database.memorizzate in scuro su file o database.

In questo caso si aggiungono altri livelli In questo caso si aggiungono altri livelli di sicurezza, quello del database, di sicurezza, quello del database, protetto da password, e inoltre si protetto da password, e inoltre si possono utilizzare altri algoritmi di possono utilizzare altri algoritmi di codifica per le passoword utente come codifica per le passoword utente come l’MD5l’MD5

Page 103: Web – services

Andrea ManconiAndrea Manconi

Sicurezza – Autenticazione Sicurezza – Autenticazione personalizzatapersonalizzata

L’MD5 è un algoritmo di codifica a L’MD5 è un algoritmo di codifica a 128 bit.128 bit.

In java può essere utilizzato con In java può essere utilizzato con l’ausilio del package java.securityl’ausilio del package java.security

Page 104: Web – services

Andrea ManconiAndrea Manconi

Sicurezza – Autenticazione Sicurezza – Autenticazione personalizzatapersonalizzata

Molti database, supportano l’MD5 Molti database, supportano l’MD5 come istruzione da linea di come istruzione da linea di commando. Il vantaggio è quello di commando. Il vantaggio è quello di eliminare la necessità di scrivere eliminare la necessità di scrivere codice JAVA aggiuntivo, alleggerendo codice JAVA aggiuntivo, alleggerendo il lavoro. il lavoro.

Page 105: Web – services

Andrea ManconiAndrea Manconi

Sicurezza – Autenticazione Sicurezza – Autenticazione personalizzatapersonalizzata Una servlet utilizza i codici di stato HTTP Una servlet utilizza i codici di stato HTTP

per gestire il proprio criterio di per gestire il proprio criterio di protezione. Per fare questo utilizza le protezione. Per fare questo utilizza le credenziali dell’utente codificate credenziali dell’utente codificate nell’intestazione nell’intestazione AuthorizationAuthorization. Nel caso . Nel caso le credenziali vengano rifiutate la servlet le credenziali vengano rifiutate la servlet imposta l’invio del codice di stato imposta l’invio del codice di stato SC_UNAUTHORIZED SC_UNAUTHORIZED e un’intestazione e un’intestazione WWW-AuthenticateWWW-Authenticate che descrive le che descrive le credenziali desiderate.credenziali desiderate.

Page 106: Web – services

Andrea ManconiAndrea Manconi

Sicurezza – Autenticazione Sicurezza – Autenticazione personalizzatapersonalizzatapublic void doGet(HttpServletRequest req, HttpServletResponse res)public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {throws ServletException, IOException { res.setContentType("text/plain");res.setContentType("text/plain"); PrintWriter out = res.getWriter();PrintWriter out = res.getWriter();

// Imposta l’header Authorization// Imposta l’header Authorization String auth = req.getHeader("Authorization");String auth = req.getHeader("Authorization");

// richiama un metodo che si interfaccia con un db per valutare l’autenticazione// richiama un metodo che si interfaccia con un db per valutare l’autenticazione if (!allowUser(auth)) {if (!allowUser(auth)) { // Accesso non permesso, notifica// Accesso non permesso, notifica res.setHeader("WWW-Authenticate", "BASIC realm=\"users\"");res.setHeader("WWW-Authenticate", "BASIC realm=\"users\""); res.sendError(res.SC_UNAUTHORIZED);res.sendError(res.SC_UNAUTHORIZED);

}} else {else { // Accesso permesso// Accesso permesso out.println(“link to diee out.println(“link to diee www.diee.unica.itwww.diee.unica.it "); "); }} }}

Page 107: Web – services

Andrea ManconiAndrea Manconi

Sicurezza: Certificati Sicurezza: Certificati DigitaliDigitali

I certificati digitali offrono un livello I certificati digitali offrono un livello di sicurezza superioredi sicurezza superiore

Chiave asimmetrica: esistono due Chiave asimmetrica: esistono due chiavichiavi

PrivataPrivata PubblicaPubblica

Page 108: Web – services

Andrea ManconiAndrea Manconi

Sicurezza: Certificati Sicurezza: Certificati DigitaliDigitali

Esempio: si consideri il caso in cui Esempio: si consideri il caso in cui due utenti debbano scambiarsi dei due utenti debbano scambiarsi dei messaggi. Identifichiamo i due utenti messaggi. Identifichiamo i due utenti come come AA e e BB

Page 109: Web – services

Andrea ManconiAndrea Manconi

Sicurezza: Certificati Sicurezza: Certificati DigitaliDigitali AA codifica il messaggio che deve codifica il messaggio che deve

inviare con la chiave pubblica di inviare con la chiave pubblica di BB BB decodifica il messaggio che ha decodifica il messaggio che ha

inviato inviato AA con la sua chiave privata con la sua chiave privata Questo sistema di chiavi è detto Questo sistema di chiavi è detto

asimmetrico perché ogni chiave può asimmetrico perché ogni chiave può decodificare i messaggi codificati con decodificare i messaggi codificati con l’altra chiavel’altra chiave

Page 110: Web – services

Andrea ManconiAndrea Manconi

Sicurezza: Certificati Sicurezza: Certificati DigitaliDigitali

Problema: questo sistema non risolve Problema: questo sistema non risolve il problema dell’autenticazione. il problema dell’autenticazione. L’utente L’utente BB non ha alcuna certezza non ha alcuna certezza che il messaggio che ha ricevuto è che il messaggio che ha ricevuto è stato inviato da stato inviato da AA o da un terzo o da un terzo utente utente CC sotto mentite spoglie !!! sotto mentite spoglie !!!

Page 111: Web – services

Andrea ManconiAndrea Manconi

Sicurezza: Certificati Sicurezza: Certificati DigitaliDigitali

Per risolvere il problema si sfrutta Per risolvere il problema si sfrutta l’asimmetria delle chiavi come segue:l’asimmetria delle chiavi come segue:

AA codifica l’informazione con la sua chiave codifica l’informazione con la sua chiave privata, e poi ancora con la chiave privata, e poi ancora con la chiave pubblica di pubblica di BB

BB decodifica l’informazione con la sua decodifica l’informazione con la sua chiave privata e poi con la chiave pubblica chiave privata e poi con la chiave pubblica di di AA, che deve possedere, che deve possedere

Page 112: Web – services

Andrea ManconiAndrea Manconi

Sicurezza: Certificati Sicurezza: Certificati DigitaliDigitali Visto che solo Visto che solo AA può codificare i può codificare i

messaggi con la sua chiave privata, messaggi con la sua chiave privata, l’autenticazione è garantita …. tuttavia l’autenticazione è garantita …. tuttavia permane ancora un problema. La permane ancora un problema. La certificazione dell’identità. Cioè come certificazione dell’identità. Cioè come può un utente garantire che è chi dice di può un utente garantire che è chi dice di essere ? A questo proposito essere ? A questo proposito intervengono le autorità di certificazione intervengono le autorità di certificazione (es VeriSign, Thawte Consulting, Entrust (es VeriSign, Thawte Consulting, Entrust Technologies)Technologies)

Page 113: Web – services

Andrea ManconiAndrea Manconi

Sicurezza: Certificati Sicurezza: Certificati DigitaliDigitali Lo svantaggio delle chiavi asimmetriche è la Lo svantaggio delle chiavi asimmetriche è la

potenza di calcolo elevata !!!potenza di calcolo elevata !!!

In genere molti sistemi utilizzano un In genere molti sistemi utilizzano un compromesso tra chiavi simmetriche e compromesso tra chiavi simmetriche e asimmetriche. Utilizzano le chiavi asimmetriche. Utilizzano le chiavi asimmetriche per identificarsi reciprocamente asimmetriche per identificarsi reciprocamente poi si scambiano una chiave simmetrica poi si scambiano una chiave simmetrica separata per cifrare gli scambi. Chiave basata separata per cifrare gli scambi. Chiave basata sulla tecnologia sulla tecnologia DES DES (Data Encryption (Data Encryption Standard)Standard)

Page 114: Web – services

Andrea ManconiAndrea Manconi

SSLSSL

SSL: Secure Sockets Layer.SSL: Secure Sockets Layer. Si interpone tra l’HTTP e il TCP/IPSi interpone tra l’HTTP e il TCP/IP Si occupa della sicurezza con il ricorso Si occupa della sicurezza con il ricorso

della crittografia a chiave pubblica per della crittografia a chiave pubblica per lo scambio di chiavi simmetriche che lo scambio di chiavi simmetriche che cifrano la comunicazione client-server.cifrano la comunicazione client-server.

La tecnologia SSL è stata sviluppata La tecnologia SSL è stata sviluppata da Netscapeda Netscape

Page 115: Web – services

Andrea ManconiAndrea Manconi

SSLSSL

Funzionamento:Funzionamento: L’utente si connette al sito sicuro SSL. I siti L’utente si connette al sito sicuro SSL. I siti

protetti con SSL hanno URL del tipo protetti con SSL hanno URL del tipo https://.... (HTTP più SSL)https://.... (HTTP più SSL)

Il server firma la sua chiave pubblica con Il server firma la sua chiave pubblica con la sua chiave privatala sua chiave privata

Il browser usa la chiave pubblica del Il browser usa la chiave pubblica del server per verificare che la persona che ha server per verificare che la persona che ha firmato la chiave sia effettivamente il suo firmato la chiave sia effettivamente il suo proprietarioproprietario

Page 116: Web – services

Andrea ManconiAndrea Manconi

SSLSSL

Il browser verifica se un’autorità di Il browser verifica se un’autorità di certificazione fidata ha firmato la certificazione fidata ha firmato la chiave.chiave.Se non c’è questo tipo di firma il Se non c’è questo tipo di firma il browser chiede all’utente di accettare browser chiede all’utente di accettare o meno la firma.o meno la firma.

Il client genera una chiave simmetrica Il client genera una chiave simmetrica che viene cifrata con la chiave pubblica che viene cifrata con la chiave pubblica del server e rinviata a quest’ultimo.del server e rinviata a quest’ultimo.

Page 117: Web – services

Distribuzione di caricoDistribuzione di carico

Page 118: Web – services

Andrea ManconiAndrea Manconi

Distribuzione di caricoDistribuzione di carico

Problema:Problema: Gestione di siti ad alto trafficoGestione di siti ad alto traffico

Soluzione:Soluzione: elaborazione tra più server backend elaborazione tra più server backend

(suddivisione del carico e maggiore (suddivisione del carico e maggiore affidabilità)affidabilità)

Page 119: Web – services

Andrea ManconiAndrea Manconi

Distribuzione di caricoDistribuzione di carico

VantaggiVantaggi Maggiore robustezzaMaggiore robustezza Prestazioni ottimizzate (più richieste)Prestazioni ottimizzate (più richieste)

SvantaggiSvantaggi Regole severe da seguireRegole severe da seguire Risultati apprezzabili solo sotto eccessivo Risultati apprezzabili solo sotto eccessivo

caricocarico Aumento dei tempi e dei costi di realizzazioneAumento dei tempi e dei costi di realizzazione

Page 120: Web – services

Andrea ManconiAndrea Manconi

Distribuzione di caricoDistribuzione di carico

Spesso il costo di un’applicazione Spesso il costo di un’applicazione distribuita è talmente oneroso che si distribuita è talmente oneroso che si preferisce spendere a livello di preferisce spendere a livello di hardwarehardware

Page 121: Web – services

Andrea ManconiAndrea Manconi

Distribuzione di caricoDistribuzione di carico

Stili di distribuzioneStili di distribuzione

No clustering:No clustering:

le servlet vengono eseguite su un’unica JVM le servlet vengono eseguite su un’unica JVM (Tomcat)(Tomcat)

Page 122: Web – services

Andrea ManconiAndrea Manconi

Distribuzione di caricoDistribuzione di carico

Clustering senza migrazione di Clustering senza migrazione di sessionesessione

le servlet di un’applicazione web possono le servlet di un’applicazione web possono essere eseguite su più macchine, mentre essere eseguite su più macchine, mentre le richieste di sessione sono legate al le richieste di sessione sono legate al server backend sul quale sono state server backend sul quale sono state inizialmente avviateinizialmente avviateSvantaggio: crash server => sessioni Svantaggio: crash server => sessioni interrotteinterrotte

Page 123: Web – services

Andrea ManconiAndrea Manconi

Distribuzione di caricoDistribuzione di carico

Clustering con migrazione di sessioneClustering con migrazione di sessione

migrazione delle sessioni per migliorare migrazione delle sessioni per migliorare il bilanciamento di carico. Per evitare il bilanciamento di carico. Per evitare problemi di concomitanza si garantisce problemi di concomitanza si garantisce che tutte le richieste che fanno parte di che tutte le richieste che fanno parte di una sessione possono essere gestite una sessione possono essere gestite solo su un’unica VM alla voltasolo su un’unica VM alla volta

Page 124: Web – services

Andrea ManconiAndrea Manconi

RiferimentiRiferimenti http://java.sun.com/webservices/docs/1.0/tuthttp://java.sun.com/webservices/docs/1.0/tut

orial/orial/ http://jakarta.apache.org/http://jakarta.apache.org/ http://java.sun.com/j2ee/1.4/docs/api/http://java.sun.com/j2ee/1.4/docs/api/ http://servlets.comhttp://servlets.com http://oreilly.com/catalog/jservlet2http://oreilly.com/catalog/jservlet2 http://www.fastcgi.comhttp://www.fastcgi.com http://www.activeserverpages.comhttp://www.activeserverpages.com http://www.java.sun.com/products/jsphttp://www.java.sun.com/products/jsp http://www.php.nethttp://www.php.net


Recommended