Web – services Andrea Manconi IASC group DIEE – Department of Electrical and Electronic Engineering

Slides:



Advertisements
Presentazioni simili
UNIVERSITÀ DEGLI STUDI DI MODENA E REGGIO EMILIA
Advertisements

Gli ipertesti del World Wide Web Funzionamento e tecniche di realizzazione a cura di Loris Tissìno (
CORSO DI SICUREZZA SU RETI II PROF. A. DE SANTIS ANNO 2006/07 Informatica granata Gruppo 2 ISP Gruppo 3 ISP.
Corso di Fondamenti di Informatica
Recupero debito quarto anno Primo incontro
Unità D2 Database nel web. Obiettivi Comprendere il concetto di interfaccia utente Comprendere la struttura e i livelli che compongono unapplicazione.
PHP.
Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006.
INTERNET : ARPA sviluppa ARPANET (rete di computer per scopi militari)
Java Enterprise Edition (JEE)
Java: programmazione concorrente con condivisione di memoria
Mantenimento dello stato Laboratorio Progettazione Web AA 2009/2010 Chiara Renso ISTI- CNR -
Laboratorio di Progettazione Web Introduzione AA 2009/2010 Chiara Renso ISTI - CNR -
Connessione con MySQL.
Java2 Esercitazioni del corso di Sistemi Informativi Marina Mongiello
Per crittografia si intende la protezione
1 Università della Tuscia - Facoltà di Scienze Politiche.Informatica 2 - a.a Prof. Francesco Donini Active Server Pages.
JavaScript Laboratorio di Applicazioni Informatiche II mod. A.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
Perché.Net e non più COM/DCOM ? Superamento dei problemi di COM: Richiede una infrastruttura "non semplice" da ogni applicazione (ad esempio Class Factory.
CAPITOLO 2 INTRODUZIONE AL LINGUAGGIO JAVA E ALL'AMBIENTE HOTJAVA.
Organizzazione della Memoria (Unix) Text contiene le istruzioni in linguaggio macchina del codice eseguibile, può essere condiviso in caso di processi.
APPLICAZIONI WEB In questo corso impareremo a scrivere un'applicazione web (WA) Marco Barbato - Corso di Applicazioni Web – A.A
Elaborazione di Franco Grivet Chin
1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net Web Part e controlli di login Elaborazione di Franco Grivet Chin.
Architettura Java/J2EE
Corso di PHP.
Distributed File System Service Dario Agostinone.
Ing. Enrico Lecchini BetaTre S.r.l.
Modulo 7 – reti informatiche u.d. 2 (syllabus – )
INTRODUZIONE l sistema operativo è il primo software che lutente utilizza quando accende il computer; 1)Viene caricato nella memoria RAM con loperazione.
Guida IIS 6 A cura di Nicola Del Re.
Centro di Assistenza Multicanale (C.A.M.) di Cagliari
Analisi (Analista) Progettazione (Progettista) Sviluppo o Traduzione (Sviluppatore) Documentazione.
BROKER SERVER Progetto di Ingegneria del Web 2008 Alessio Bianchi Andrea Gambitta Giuseppe Siracusano.
Configurazione in ambiente Windows Ing. A. Stile – Ing. L. Marchesano – 1/23.
Introduzione alle ASP: primi passi negli script. Frosini Andrea Università degli studi di Siena Dipartimento di Scienze Matematiche.
Basi di Dati e Sistemi Informativi
Sistemi Informativi sul Web
Introduzione alla programmazione web
Common Gateway Interface. Dynamic HTML le risposte inviate al client sono (parzialmente o totalmente) create on-the-fly (al volo) dopo aver ricevuto il.
Un problema importante
ASP – Active Server Pages - 1 -Giuseppe De Pietro Introduzione ASP, acronimo di Active Server Pages, sta ad indicare una tecnologia per lo sviluppo di.
Applicazione Web Informatica Abacus Informatica Classe VIA 2008/2009 N.Ceccon INF (01) Revisione 4.0 settembre 2008.
ASP – Active Server Pages Introduzione Pagine Web Statiche & Dinamiche(ASP)
Protocolli e architetture per WIS. Web Information Systems (WIS) Un Web Information System (WIS) usa le tecnologie Web per permettere la fruizione di.
Laboratorio di Servizi Web - servlet - Ardissono 1 Java Servlet API package javax.servlet: include classi e interfacce di gestione di servlet indipendenti.
Introduzione a Javascript
Eprogram informatica V anno. ASP.NET Introduzione ASP.NET (Active Server Page) è il linguaggio che, sfruttando la tecnologia.NET, permette di: -scrivere.
Analisi dettagliata e design
Programmazione Web PHP e MySQL 1. 2Programmazione Web - PHP e MySQL Esempio: un blog.
Interazione col DB Per interagire con una base dati da una pagina PHP occorre procedere come segue: Eseguire la connessione al DBMS MySQL in ascolto;
TW Asp - Active Server Pages Nicola Gessa. TW Nicola Gessa Introduzione n Con l’acronimo ASP (Active Server Pages) si identifica NON un linguaggio di.
Protocolli e architetture per WIS. Cronologia di Internet ricerche sulla commutazione di pacchetto (Leonard Kleinrock) 1967 Nasce il progetto.
Progetto di Ingegneria del Web Anno Accademico 2007/2008 Stefano Pigiani Bruno Ricci Marco Ruzzon.
Relatore: Prof. Ing. Stefano SalsanoLaureando: Flaminio Antonucci.
Sistemi di elaborazione dell’informazione Modulo 3 -Protocolli applicativi Unità didattica 4 -Protocolli del Web Ernesto Damiani Lezione 1 – World Wide.
Reti di calcolatori e sicurezza “Configurare il web-server Apache” a cura di Luca Sozio.
Servizi Internet Claudia Raibulet
Ingegneria del software Modulo 3 -Tecniche d’implementazione Unità didattica 1 -Ingegneria dei componenti Ernesto Damiani Università degli Studi di Milano.
SnippetSearch Database di snippet bilanciato e replicato di Gianluigi Salvi Reti di calcolatori LS – Prof. A.Corradi.
Tecnologie lato Server: i Server Web © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto.
Eprogram informatica V anno.
Le basi di dati.
Architetture software
Eprogram informatica V anno. Programmare in rete.
Cenni di Crittografia Luigi Vetrano TechnoLabs S.p.A. L’Aquila, Aprile 2011.
Gestire i dati: download e salvataggio. L’importanza dei dati La quasi totalità delle applicazioni hala necessità di gestire varie funzionalità relative.
Framework di sicurezza della piattaforma OCP (Identity & Access Management) Smart Cities and Communities and Social Innovation Bando MIUR D.D. 391/Ric.
ASP – Active Server Pages - 1 -Giuseppe Tandoi ASP – Active Server Pages Tecnologia per lo sviluppo di pagine dinamiche.
Transcript della presentazione:

Web – services Andrea Manconi IASC group DIEE – Department of Electrical and Electronic Engineering

Andrea Manconi Sommario Web services Web services Web application (CGI, FastCGI, ASP, JSP,PHP)‏ Web application (CGI, FastCGI, ASP, JSP,PHP)‏ Servlet vs CGI, FastCGI, ASP, JSP, PHP Servlet vs CGI, FastCGI, ASP, JSP, PHP Servlet – persistenza Servlet – persistenza Servlet – caching Servlet – caching Servlet – contenuto HTML Servlet – contenuto HTML Servlet – sessioni Servlet – sessioni Servlet – sicurezza Servlet – sicurezza Distribuzione di carico Distribuzione di carico

Web service

Andrea Manconi Web service Per web service si intende un servizio offerto attraverso il web. Esempio: richiesta informazioni prodotto catalogo. Si invia una richiesta ad un dato URL e il servizio risponde fornendo le informazioni richieste. Esempio: richiesta informazioni prodotto catalogo. Si invia una richiesta ad un dato URL e il servizio risponde fornendo le informazioni richieste.

Andrea Manconi Web service Web page: statica. Non esiste interazione Web page: statica. Non esiste interazione Web application: dinamica. Interazione con l’utente Web application: dinamica. Interazione con l’utente

Web application

Andrea Manconi Web application CGI CGI FastCGI FastCGI ASP ASP JSP JSP PHP PHP Java Servlet Java Servlet

Andrea Manconi Web application - CGI Common Gateway Interface Una delle prime tecnologie utilizzate Una delle prime tecnologie utilizzate Nata per definire un metodo standard per la comunicazione tra un server di informazioni e applicazioni esterne Nata per definire un metodo standard per la comunicazione tra un server di informazioni e applicazioni esterne Ciclo di vita: pessimo, un nuovo processo per ogni richiesta (tempo e risorse del server)‏ Ciclo di vita: pessimo, un nuovo processo per ogni richiesta (tempo e risorse del server)‏

Andrea Manconi Web application - CGI Vantaggi Vantaggi Semplice da scrivere Semplice da scrivere Portabilità Portabilità Supporta molti linguaggi: es. C, Perl Supporta molti linguaggi: es. C, Perl

Andrea Manconi Web application - CGI Svantaggi Svantaggi Prestazioni limitate Prestazioni limitate Impossibilità di interazione con il server web a causa dei processi separati (es. non è possibile scrivere sul file log del server)‏ Impossibilità di interazione con il server web a causa dei processi separati (es. non è possibile scrivere sul file log del server)‏

Andrea Manconi Web application - CGI HelloWorld.cgi (Perl)‏ #!/usr/bin/perl $t = "Hello World!"; print <<EOT; Content-type: text/html $t $t EOT EOT

Andrea Manconi Web application - FastCGI FastCGI Sviluppata da Open Market Sviluppata da Open Market Elimina la necessità di creare un nuovo processo per ogni richiesta pervenuta Elimina la necessità di creare un nuovo processo per ogni richiesta pervenuta Tuttavia è necessario attivare almeno un processo per ogni programma FastCGI Tuttavia è necessario attivare almeno un processo per ogni programma FastCGI

Andrea Manconi Web application - FastCGI Vantaggi Vantaggi Semplice Semplice Facile migrare da applicazioni CGI ad applicazioni FastCGI Facile migrare da applicazioni CGI ad applicazioni FastCGI Alte performance (rispetto a CGI)‏ Alte performance (rispetto a CGI)‏ Molti linguaggi supportati Molti linguaggi supportati

Andrea Manconi Web application - FastCGI Svantaggi Svantaggi è necessario attivare almeno un processo per ogni programma FastCGI, se un programma FastCGI deve gestire richieste concorrenti saranno attivati più processi è necessario attivare almeno un processo per ogni programma FastCGI, se un programma FastCGI deve gestire richieste concorrenti saranno attivati più processi continua a mancare l’interazione con il server continua a mancare l’interazione con il server

Andrea Manconi Web application - ASP Active Server Pages Sviluppato da Microsoft Sviluppato da Microsoft Pagina HTML con codice incorporato (in genere VBScript e JScript)‏ Pagina HTML con codice incorporato (in genere VBScript e JScript)‏ Problema: in piattaforma non Windows potrebbero sorgere problemi legati all’assenza della libreria COM di Windows Problema: in piattaforma non Windows potrebbero sorgere problemi legati all’assenza della libreria COM di Windows

Andrea Manconi Web application - ASP Vantaggi Vantaggi Facile da usare Facile da usare Ottimizzato per piccoli contenuti dinamici Ottimizzato per piccoli contenuti dinamici

Andrea Manconi Web application - ASP Svantaggi Svantaggi Portabilità: Portabilità: 1) il supporto ASP è contenuto in Microsoft Internet Information Server 3.0, disponibile gratuitamente, mentre il supporto per altri server web è disponibile come prodotto commerciale 1) il supporto ASP è contenuto in Microsoft Internet Information Server 3.0, disponibile gratuitamente, mentre il supporto per altri server web è disponibile come prodotto commerciale 2) su piattaforme non Windows problemi legati all’assenza della libreria COM 2) su piattaforme non Windows problemi legati all’assenza della libreria COM

Andrea Manconi Web application - ASP HelloWorld.asp ">Hello World! ">Hello World!

Andrea Manconi Web application - ASP Hello World! Hello World! Hello World! Hello World! Hello World! Hello World! Hello World! Hello World! Hello World! Hello World!

Andrea Manconi Web application - JSP Java Server Pages Alternativa ad ASP basata su Java Alternativa ad ASP basata su Java Sviluppata da SUN Sviluppata da SUN Forte legame con le servlet Forte legame con le servlet

Andrea Manconi Web application - JSP Vantaggi Vantaggi Standard: implementato da moltissimi produttori su tutte le piattaforme Standard: implementato da moltissimi produttori su tutte le piattaforme Semplice passare da ASP a JSP per chi conosce JAVA Semplice passare da ASP a JSP per chi conosce JAVA

Andrea Manconi Web application - JSP Svantaggi Svantaggi Un solo linguaggio di script: JAVA Un solo linguaggio di script: JAVA Ottimizzato per piccoli contenuti dinamici Ottimizzato per piccoli contenuti dinamici

Andrea Manconi Web application - JSP HelloWorld.jsp<HTML> Hello World! The time is now Hello World! The time is now </HTML>

Andrea Manconi Web application - PHP È un linguaggio di scripting open-source per la creazione di contenuti dinamici È un linguaggio di scripting open-source per la creazione di contenuti dinamici Il codice PHP viene scritto come codice embedded all’interno delle pagine HTML Il codice PHP viene scritto come codice embedded all’interno delle pagine HTML

Andrea Manconi Web application - PHP HelloWorld.php /* void echo ( string arg1 [, string argn...]) */ _________________________________________<html><head> Test PHP Test PHP "; ?> "; ?></body></html>

Andrea Manconi Web application - PHP Interfaccia verso i più comuni database (oracle, MySQL …)‏ Interfaccia verso i più comuni database (oracle, MySQL …)‏ Sintassi simile a quella del C e di Perl Sintassi simile a quella del C e di Perl Cross-platform compatibility: significa che gli script PHP sono supportati da tutti gli Internet servers Cross-platform compatibility: significa che gli script PHP sono supportati da tutti gli Internet servers

Andrea Manconi Web application - PHP Vantaggi: Vantaggi: Open – source !!! Open – source !!! Non è proprietario, e quindi non è ristretto a determinate piattaforme Non è proprietario, e quindi non è ristretto a determinate piattaforme Facile da utilizzare Facile da utilizzare

Andrea Manconi Web application - PHP Svantaggi Svantaggi Forte consumo di memoria da parte dell’interprete (variabili non necessariamente dichiarate)‏ Forte consumo di memoria da parte dell’interprete (variabili non necessariamente dichiarate)‏

Andrea Manconi Web application - Servlet Servlet E’ pensabile come ad una estensione che è possibile collegare ad un server al fine di migliorarne ed estenderne le funzionalità. E’ pensabile come ad una estensione che è possibile collegare ad un server al fine di migliorarne ed estenderne le funzionalità. L’esecuzione avviene all’interno di una JVM e pertanto è sicura e portabile L’esecuzione avviene all’interno di una JVM e pertanto è sicura e portabile

Andrea Manconi Web application - Servlet Tutte le servlet vengono gestite da thread separati all’interno dello stesso processo Tutte le servlet vengono gestite da thread separati all’interno dello stesso processo Portabilità: sia rispetto ai sistemi operativi, sia verso i server web Portabilità: sia rispetto ai sistemi operativi, sia verso i server web

Andrea Manconi Web application - Servlet Le servlet operano all’interno del dominio del server, pertanto a differenza delle applet non richiedono che il browser supporti JAVA Le servlet operano all’interno del dominio del server, pertanto a differenza delle applet non richiedono che il browser supporti JAVA

Andrea Manconi Servlet vs CGI Servlet sono una soluzione Sun alle CGI Servlet sono una soluzione Sun alle CGI Entrambi generano contenuti dinamici Entrambi generano contenuti dinamici Le Servlet sono sicure Le Servlet sono sicure Le Servlet sono indipendenti dalla piattaforma Le Servlet sono indipendenti dalla piattaforma Le Servlet hanno un migliore supporto per i componenti riusabili Le Servlet hanno un migliore supporto per i componenti riusabili

Andrea Manconi Servlet vs CGI Servlet: vantaggi Servlet: vantaggi associate a thread del web server, non a processi separati associate a thread del web server, non a processi separati Servlet: svantaggi Servlet: svantaggi Possono essere scritte esclusivamente in Java Possono essere scritte esclusivamente in Java

Andrea Manconi Servlet vs CGI L’esecuzione di una CGI è indipendente dalle altre. La comunicazione tra diverse istanze è complessa L’esecuzione di una CGI è indipendente dalle altre. La comunicazione tra diverse istanze è complessa Una servlet è sempre in esecuzione e la comunicazione tra i vari thread è semplificata Una servlet è sempre in esecuzione e la comunicazione tra i vari thread è semplificata Un processo per ogni richiesta. Ad n richieste n copie dell’applicazione in memoria Un processo per ogni richiesta. Ad n richieste n copie dell’applicazione in memoria

Andrea Manconi Servlet vs CGI MediaMolto altaIndipendenza dalla piattaforma BassaAltaEfficienza di esecuzione Media Creazione CGI ScriptsServlet

Andrea Manconi Servlet vs FastCGI Servlet: gestione semplificata delle sessioni Servlet: gestione semplificata delle sessioni FastCGI: possibilità di scelta tra più linguaggi FastCGI: possibilità di scelta tra più linguaggi Servlet: PORTABILITA’ Servlet: PORTABILITA’

Andrea Manconi Servlet vs ASP Le Servlet sono portabili verso Le Servlet sono portabili verso altri sistemi operativi altri sistemi operativi web server web server Le Servlet sono più potenti per applicazioni complesse Le Servlet sono più potenti per applicazioni complesse Migliore supporto per componenti riusabili Migliore supporto per componenti riusabili

Andrea Manconi Servlet vs JSP Esiste una forte relazione tra le servlet e JSP Servlet: codice JAVA che legge e scrive HTML Servlet: codice JAVA che legge e scrive HTML JSP: HTML con codice JAVA embedded JSP: HTML con codice JAVA embedded

Andrea Manconi Servlet vs PHP Java è ottimo per progetti complessi Java è ottimo per progetti complessi Librerie Librerie PHP utilizza i cookie ma non ha una gestione delle sessioni PHP utilizza i cookie ma non ha una gestione delle sessioni

Andrea Manconi Web server WebSphere (IBM)‏ WebSphere (IBM)‏ WebLogic (BEA)‏ WebLogic (BEA)‏ i Application Server (Oracle)‏ 9i Application Server (Oracle)‏ Jrun (Allaire) Jrun (Allaire) Sun Java Web Server Sun Java Web Server Tomcat (Apache)‏ Tomcat (Apache)‏

Servlet

Andrea Manconi J2EE J2EE raccoglie diverse API lato server J2EE raccoglie diverse API lato server Servlet API Servlet API JSP JSP EJB EJB JavaMail JavaMail JMS (Java Messaging Service)‏ JMS (Java Messaging Service)‏ JTA (Java Transactions)‏ JTA (Java Transactions)‏ Corba Corba JDBC JDBC JAXP (Java API for XML Parsing)‏ JAXP (Java API for XML Parsing)‏ JNDI (Java Naming and Directory Interface)‏ JNDI (Java Naming and Directory Interface)‏

Persistenza

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

Andrea Manconi Persistenza Vantaggi: Vantaggi: Ridotto consumo di memoria Ridotto consumo di memoria Riduzione del carico di lavoro, altrimenti necessario per creare un nuovo oggetto ad ogni richiesta Riduzione del carico di lavoro, altrimenti necessario per creare un nuovo oggetto ad ogni richiesta Permette la persistenza Permette la persistenza

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

Andrea Manconi Persistenza import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class SimpleCounter extends HttpServlet { int count = 0; int count = 0; public 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(); count++; count++; out.println(“Numero di accessi: " + count); out.println(“Numero di accessi: " + count); }}

Andrea Manconi Persistenza Problema: Problema: se si utilizzano variabili locali non esistono problemi di interazione tra i thread, ma se si utilizzano variabili non locali …

Andrea Manconi Persistenza Si consideri contatore mostrato in precedenza, cosa accade se due utenti accedono alla servlet quasi contemporaneamente ? Si consideri contatore mostrato in precedenza, cosa accade se due utenti accedono alla servlet quasi contemporaneamente ? Entrambi i thread saranno colpevoli di incrementare lo stesso valore del contatore, mostrando a video lo stesso risultato.

Andrea Manconi Persistenza Il problema è dovuto alla necessità di sincronizzare l’utilizzo della variabile count, in modo che un thread alla volta possa operare su essa. Il problema è dovuto alla necessità di sincronizzare l’utilizzo della variabile count, in modo che un thread alla volta possa operare su essa. In java questo viene fatto utilizzando la parola chiave synchronized In java questo viene fatto utilizzando la parola chiave synchronized

Andrea Manconi Persistenza Possibili soluzioni: public syncronized void doGet(HttpServletRequest req, HttpServletResponse res) …

Andrea Manconi Persistenza Un’altra soluzione … PrintWriter out = res.getWriter(); syncronized(this) { count++; out.println(“Numero di accessi” + count); }

Andrea Manconi Persistenza Problematiche legate: Problematiche legate: L’utilizzo della sincronizzazione (monitor) implica un carico elevato L’utilizzo della sincronizzazione (monitor) implica un carico elevato Nel periodo in cui un thread esegue un blocco syncronized gli altri thread possono essere bloccati in attesa del rilascio delle risorse !!! Nel periodo in cui un thread esegue un blocco syncronized gli altri thread possono essere bloccati in attesa del rilascio delle risorse !!!

Andrea Manconi Persistenza Altre problematiche: cosa accade se il server “cade”, oppure se per qualche motivo è necessario ricaricare la servlet ?

Andrea Manconi Persistenza … il contatore inizia a contare da zero

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

Andrea Manconi Persistenza Con l’utilizzo di questi due metodi, il problema del contatore può essere risolto facilmente interfacciandoci con un db o con l’utilizzo di un file. init(): inizializzazione del contatore a zero al primo accesso in assoluto o lettura del suo valore da file o db destroy(): memorizzazione del nuovo valore del contatore

Andrea Manconi Persistenza Singolo thread Singolo thread Esiste la possibilità di caricare per una servlet un pool di istanze. Non tutti i server permettono di fare questo. Esiste la possibilità di caricare per una servlet un pool di istanze. Non tutti i server permettono di fare questo. È necessario che la servlet implementi l’interfaccia javax.servlet.SingleThreadModel (è un’interfaccia vuota !!!)‏ È necessario che la servlet implementi l’interfaccia javax.servlet.SingleThreadModel (è un’interfaccia vuota !!!)‏

Caching

Andrea Manconi Caching Molti browser per ridurre il tempo di acceso ad una pagina web accedono alla loro copia in cache. Molti browser per ridurre il tempo di acceso ad una pagina web accedono alla loro copia in cache. Dal punto di vista delle web-application questo “vantaggio” può essere un grosso problema !!! Infatti si scontra con l’histrory del client.

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

Andrea Manconi Caching La maggior parte dei server web, restituisce, ad ogni richiesta, un intestazione LastModified : Sun, 07-Jul :10:00 GMT Lato browser web, viene inclusa nella propria richiesta un’intestazione identica IfModifiedSince.

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

Andrea Manconi Caching Nel caso di contenuto dinamico (servlet) è cosa buona e giusta che il server assuma che il contenuto cambi in continuazione. Questo implica lo svantaggio di dovere effettivamente ricaricare le pagine dinamiche lato client, e carico di lavoro lato server, ma previene da eventuali malfunzionamenti !!!

Andrea Manconi Caching Per impostare il ricaricamento delle pagine, la servlet può implementare il metodo protected long getLastModified(HttpServletRequest)‏ Il server interroga questo metodo per scoprire quando è stata l’ultima volta che la servlet ha modificato il suo output.

Contenuto HTML

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

Andrea Manconi Contenuto HTML private void privateArea ( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ private void privateArea ( HttpServletRequest request, HttpServletResponse response) 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.println("<HTML"+ out.println("<HTML"+ " Comune di Sestu - E-commerce - Sestu 2010 \n"+ " Comune di Sestu - E-commerce - Sestu 2010 \n"+ " \n"+ " \n"+ " Area Privata. Solo autorizzati\n"+ " Area Privata. Solo autorizzati\n"+ " \n"+ " \n"+

Andrea Manconi Acquisire contenuto dai form In una web application spesso risulta necessario acquisire informazioni dall’utente. Si pensi al classico servizio di registrazione utente.

Andrea Manconi Acquisire contenuto dai form " \n"+ " \n"+ " \n"+ " Compila il modulo di registrazione \n"+ " Compila il modulo di registrazione \n"+ " \n"+ " \n"+ " User name: \n"+ " User name: \n"+ " \n"+ " \n"+ " Password: \n"+ " Password: \n"+ " \n"+ " \n"+ " \n"+ " Ridigitare la password: \n"+ " \n"+ " Ridigitare la password: \n"+ " \n"+ " \n"+ " Nome: \n"+ " Nome: \n"+ " \n"+ " \n"+

Andrea Manconi Acquisire contenuto dai form public String getParameter(String name)‏ String il metodo permette di acquisire i valori associati al campo del form individuato dal parametro “name”. Il metodo è definito dall’interfaccia javax.servlet.ServletRequest ed è ereditato da javax.servlet.HttpServletRequest ServletRequest

Andrea Manconi Acquisire contenuto dai form sqlCommand = "INSERT INTO custinfo VALUES “+ "('"+request.getParameter("userid")+ "',MD5('"+request.getParameter("newpswid")+"'), '“+request.getParameter("firstname")+"'"+

Session tracking

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

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

Andrea Manconi Session tracking Autenticazione utente: processo che porta a riconoscere un client tramite user name e una password, con l’aiuto del metodo String getRemoteUser() metodo definito nella classe HttpServletRequest E’ possibile dare l’accesso ad alcune risorse solo a utenti identificati da user name e password noti.

Andrea Manconi Session tracking Vantaggi Vantaggi Facile da realizzare Facile da realizzare Indipendente dalla macchina dalla quale si connette Indipendente dalla macchina dalla quale si connette Svantaggi Svantaggi Registrazione obbligatoria Registrazione obbligatoria Login obbligatorio Login obbligatorio Logout solo disconnettendosi dal browser Logout solo disconnettendosi dal browser

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

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

Andrea Manconi Session tracking I cookie vengono ritrasmessi verso il server HTTP ogni volta che: il cookie non è scaduto il cookie non è scaduto il dominio che interroghiamo è il dominio di persistenza del cookie il dominio che interroghiamo è il dominio di persistenza del cookie

Andrea Manconi Session tracking Limitazioni: i browser accettano 20 cookie per sito 20 cookie per sito 300 cookie per utente 300 cookie per utente 4096 byte per cookie 4096 byte per cookie

Andrea Manconi Session tracking Le servlet API definiscono la classe javax.servlet.http.Cookie per la gestione dei cookie Le servlet API definiscono la classe javax.servlet.http.Cookie per la gestione dei cookie Una servlet recupera tutti i cookie che ha inviato attraverso il metodo Una servlet recupera tutti i cookie che ha inviato attraverso il metodo public Cookie[] HttpServletRequest.getCookies()‏

Andrea Manconi Session tracking Per default i cookie sono restituiti solo all’host che li ha salvati Per default i cookie sono restituiti solo all’host che li ha salvati È possibile impostare la scadenza per un cookie utilizzando il metodo È possibile impostare la scadenza per un cookie utilizzando il metodo public void Cookie.setMaxAge(int expiry)‏

Andrea Manconi Session tracking Vantaggi Vantaggi Anonimo e trasparente Anonimo e trasparente Svantaggi Svantaggi Fortemente legato alla macchina, i cookie sono memorizzati su disco !!! Fortemente legato alla macchina, i cookie sono memorizzati su disco !!! Il browser può non supportare i cookie Il browser può non supportare i cookie

Andrea Manconi Session tracking Servlet Session Tracking Quando un utente accede ad una web application gli viene assegnato un ID unico di sessione Quando un utente accede ad una web application gli viene assegnato un ID unico di sessione L’ID di sessione viene salvato sul client in un cookie chiamato JSESSIONID. Se il client non supporta i cookie, l’ID di sessione viene inviato come parte di un URL modificato. L’ID di sessione viene salvato sul client in un cookie chiamato JSESSIONID. Se il client non supporta i cookie, l’ID di sessione viene inviato come parte di un URL modificato. La session può essere invalidata con la chiusura del browser o impostando un timeout per la sessione. La session può essere invalidata con la chiusura del browser o impostando un timeout per la sessione.

Andrea Manconi Session tracking Un’HttpSession è ottenibile tramite la HttpServletRequest public void doPost(HttpServletRequest req,HttpServletResponse res) { …. HttpSession session = req.getSession(true); }

Andrea Manconi Session tracking Per la gestione degli oggetti public voi setAttribute(String name, Object value)‏ public Object getAttribute(String name)‏ public void removeAttribute(String name)‏

Sicurezza

Andrea Manconi Sicurezza Autenticazione: Autenticazione: identificare il client Autorizzazione: Autorizzazione: limitare l’accesso alle risorse ad un insieme selezionato di utenti Riservatezza: Riservatezza: garanzia che soltanto le parti coinvolte possano comprendere la comunicazione Integrità: Integrità: garantire che il contenuto della comunicazione non è mutato durante la trasmissione

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

Andrea Manconi Sicurezza – Autenticazione HTTP Codifica Base64 per la trasmissione delle password (facilmente reversibile)‏ Codifica Base64 per la trasmissione delle password (facilmente reversibile)‏ Password scritte in chiaro sul server Password scritte in chiaro sul server

Andrea Manconi Sicurezza – Autenticazione HTTP secret secret SalaryServer SalaryServer SecretProtection SecretProtection /servlet/SalaryServer /servlet/SalaryServer /servlet/secret /servlet/secret GET GET POST POST

Andrea Manconi Sicurezza – Autenticazione HTTP <auth-constraint> manager manager </auth-constraint> </security-constraint> BASIC BASIC Default Default </realm-name> </login-config> manager manager </security-role>

Andrea Manconi Sicurezza – Autenticazione HTTP protegge un elemento in modo da consentire l’accesso solo ai ruoli indicati da. protegge un elemento in modo da consentire l’accesso solo ai ruoli indicati da. Se non è specificata alcuna voce vengono protetti tutti i metodi HTTP. La metodologia di autenticazione è specificata da.

Andrea Manconi Sicurezza – Autenticazione HTTP Il file utilizzato per l’autenticazione HTTP Il file utilizzato per l’autenticazione HTTP (con tomcat web server tomcat-users.xml)‏ (con tomcat web server tomcat-users.xml)‏<tomcat-users> </tomcat-users>

Andrea Manconi Sicurezza – Autenticazione HTTP Recupero parametri di autenticazione Recupero parametri di autenticazione public String HttpServletRequest.getRemoteUser()‏ /* restituisce il nome dell’utente che effettua la richiesta */ public String HttpServletRequest.getAuthType()‏ /* restituisce il tipo di autorizzazione usata */ public boolean HttpServletRequest.isUserInRole(String role)‏ /* restituisce true solo se l’utente autenticato appartiene al ruolo specificato */

Andrea Manconi Sicurezza – Autenticazione basata su modulo A differenza della autenticazione base, permette di entrare nel sito con una pagina di login documentata. A differenza della autenticazione base, permette di entrare nel sito con una pagina di login documentata. Come per l’autenticazione base anche in questo caso le password sono in chiaro sul server e facilmente individuabili. Come per l’autenticazione base anche in questo caso le password sono in chiaro sul server e facilmente individuabili.

Andrea Manconi Sicurezza – Autenticazione basata su modulo Vengono impostate due pagine HTML, una per il login corretto e una pagina di errore. Vengono impostate due pagine HTML, una per il login corretto e una pagina di errore. Le pagine sono indicate nel web.xml

Andrea Manconi Sicurezza – Autenticazione basata su modulo secret secret SalaryServer SalaryServer SecretProtection SecretProtection /servlet/SalaryServer /servlet/SalaryServer /servlet/secret /servlet/secret GET GET POST POST

Andrea Manconi Sicurezza – Autenticazione basata su modulo <auth-constraint> manager manager <login-config> FORM FORM /loginpage.html /loginpage.html /errorpage.html /errorpage.html manager manager

Andrea Manconi Sicurezza – Autenticazione personalizzata Sfrutta l’autenticazione HTTP Sfrutta l’autenticazione HTTP Potenzialità: Potenzialità: gestione all’accesso di una servlet (user/password)‏ gestione all’accesso di una servlet (user/password)‏ gestione all’accesso di una risorsa in base alla nazione di appartenenza (vedi embargo)‏ gestione all’accesso di una risorsa in base alla nazione di appartenenza (vedi embargo)‏ gestione dell’accesso ad una risorsa in base all’IP gestione dell’accesso ad una risorsa in base all’IP

Andrea Manconi Sicurezza – Autenticazione personalizzata L’autenticazione personalizzata fa in genere riferimento a password memorizzate in scuro su file o database. L’autenticazione personalizzata fa in genere riferimento a password memorizzate in scuro su file o database. In questo caso si aggiungono altri livelli di sicurezza, quello del database, protetto da password, e inoltre si possono utilizzare altri algoritmi di codifica per le passoword utente come l’MD5

Andrea Manconi Sicurezza – Autenticazione personalizzata L’MD5 è un algoritmo di codifica a 128 bit. L’MD5 è un algoritmo di codifica a 128 bit. In java può essere utilizzato con l’ausilio del package java.security In java può essere utilizzato con l’ausilio del package java.security

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

Andrea Manconi Sicurezza – Autenticazione personalizzata Una servlet utilizza i codici di stato HTTP per gestire il proprio criterio di protezione. Per fare questo utilizza le credenziali dell’utente codificate nell’intestazione Authorization. Nel caso le credenziali vengano rifiutate la servlet imposta l’invio del codice di stato SC_UNAUTHORIZED e un’intestazione WWW-Authenticate che descrive le credenziali desiderate. Una servlet utilizza i codici di stato HTTP per gestire il proprio criterio di protezione. Per fare questo utilizza le credenziali dell’utente codificate nell’intestazione Authorization. Nel caso le credenziali vengano rifiutate la servlet imposta l’invio del codice di stato SC_UNAUTHORIZED e un’intestazione WWW-Authenticate che descrive le credenziali desiderate.

Andrea Manconi Sicurezza – Autenticazione personalizzata 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 "); } }

Andrea Manconi Sicurezza: Certificati Digitali I certificati digitali offrono un livello di sicurezza superiore I certificati digitali offrono un livello di sicurezza superiore Chiave asimmetrica: esistono due chiavi Chiave asimmetrica: esistono due chiavi Privata Privata Pubblica Pubblica

Andrea Manconi Sicurezza: Certificati Digitali Esempio: si consideri il caso in cui due utenti debbano scambiarsi dei messaggi. Identifichiamo i due utenti come A e B Esempio: si consideri il caso in cui due utenti debbano scambiarsi dei messaggi. Identifichiamo i due utenti come A e B

Andrea Manconi Sicurezza: Certificati Digitali A codifica il messaggio che deve inviare con la chiave pubblica di B A codifica il messaggio che deve inviare con la chiave pubblica di B B decodifica il messaggio che ha inviato A con la sua chiave privata B decodifica il messaggio che ha inviato A con la sua chiave privata Questo sistema di chiavi è detto asimmetrico perché ogni chiave può decodificare i messaggi codificati con l’altra chiave Questo sistema di chiavi è detto asimmetrico perché ogni chiave può decodificare i messaggi codificati con l’altra chiave

Andrea Manconi Sicurezza: Certificati Digitali Problema: questo sistema non risolve il problema dell’autenticazione. L’utente B non ha alcuna certezza che il messaggio che ha ricevuto è stato inviato da A o da un terzo utente C sotto mentite spoglie !!! Problema: questo sistema non risolve il problema dell’autenticazione. L’utente B non ha alcuna certezza che il messaggio che ha ricevuto è stato inviato da A o da un terzo utente C sotto mentite spoglie !!!

Andrea Manconi Sicurezza: Certificati Digitali Per risolvere il problema si sfrutta l’asimmetria delle chiavi come segue: A codifica l’informazione con la sua chiave privata, e poi ancora con la chiave pubblica di B A codifica l’informazione con la sua chiave privata, e poi ancora con la chiave pubblica di B B decodifica l’informazione con la sua chiave privata e poi con la chiave pubblica di A, che deve possedere B decodifica l’informazione con la sua chiave privata e poi con la chiave pubblica di A, che deve possedere

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

Andrea Manconi Sicurezza: Certificati Digitali Lo svantaggio delle chiavi asimmetriche è la potenza di calcolo elevata !!! Lo svantaggio delle chiavi asimmetriche è la potenza di calcolo elevata !!! In genere molti sistemi utilizzano un compromesso tra chiavi simmetriche e asimmetriche. Utilizzano le chiavi asimmetriche per identificarsi reciprocamente poi si scambiano una chiave simmetrica separata per cifrare gli scambi. Chiave basata sulla tecnologia DES (Data Encryption Standard)‏ In genere molti sistemi utilizzano un compromesso tra chiavi simmetriche e asimmetriche. Utilizzano le chiavi asimmetriche per identificarsi reciprocamente poi si scambiano una chiave simmetrica separata per cifrare gli scambi. Chiave basata sulla tecnologia DES (Data Encryption Standard)‏

Andrea Manconi SSL SSL: Secure Sockets Layer. SSL: Secure Sockets Layer. Si interpone tra l’HTTP e il TCP/IP Si interpone tra l’HTTP e il TCP/IP Si occupa della sicurezza con il ricorso della crittografia a chiave pubblica per lo scambio di chiavi simmetriche che cifrano la comunicazione client-server. Si occupa della sicurezza con il ricorso della crittografia a chiave pubblica per lo scambio di chiavi simmetriche che cifrano la comunicazione client-server. La tecnologia SSL è stata sviluppata da Netscape La tecnologia SSL è stata sviluppata da Netscape

Andrea Manconi SSL Funzionamento: L’utente si connette al sito sicuro SSL. I siti protetti con SSL hanno URL del tipo (HTTP più SSL)‏ L’utente si connette al sito sicuro SSL. I siti protetti con SSL hanno URL del tipo (HTTP più SSL)‏ Il server firma la sua chiave pubblica con la sua chiave privata Il server firma la sua chiave pubblica con la sua chiave privata Il browser usa la chiave pubblica del server per verificare che la persona che ha firmato la chiave sia effettivamente il suo proprietario Il browser usa la chiave pubblica del server per verificare che la persona che ha firmato la chiave sia effettivamente il suo proprietario

Andrea Manconi SSL Il browser verifica se un’autorità di certificazione fidata ha firmato la chiave. Il browser verifica se un’autorità di certificazione fidata ha firmato la chiave. Se non c’è questo tipo di firma il browser chiede all’utente di accettare o meno la firma. Il client genera una chiave simmetrica che viene cifrata con la chiave pubblica del server e rinviata a quest’ultimo. Il client genera una chiave simmetrica che viene cifrata con la chiave pubblica del server e rinviata a quest’ultimo.

Distribuzione di carico

Andrea Manconi Distribuzione di carico Problema: Problema: Gestione di siti ad alto traffico Gestione di siti ad alto traffico Soluzione: Soluzione: elaborazione tra più server backend (suddivisione del carico e maggiore affidabilità)‏ elaborazione tra più server backend (suddivisione del carico e maggiore affidabilità)‏

Andrea Manconi Distribuzione di carico Vantaggi Vantaggi Maggiore robustezza Maggiore robustezza Prestazioni ottimizzate (più richieste)‏ Prestazioni ottimizzate (più richieste)‏ Svantaggi Svantaggi Regole severe da seguire Regole severe da seguire Risultati apprezzabili solo sotto eccessivo carico Risultati apprezzabili solo sotto eccessivo carico Aumento dei tempi e dei costi di realizzazione Aumento dei tempi e dei costi di realizzazione

Andrea Manconi Distribuzione di carico Spesso il costo di un’applicazione distribuita è talmente oneroso che si preferisce spendere a livello di hardware Spesso il costo di un’applicazione distribuita è talmente oneroso che si preferisce spendere a livello di hardware

Andrea Manconi Distribuzione di carico Stili di distribuzione No clustering: No clustering: le servlet vengono eseguite su un’unica JVM (Tomcat)‏

Andrea Manconi Distribuzione di carico Clustering senza migrazione di sessione Clustering senza migrazione di sessione le servlet di un’applicazione web possono essere eseguite su più macchine, mentre le richieste di sessione sono legate al server backend sul quale sono state inizialmente avviate Svantaggio: crash server => sessioni interrotte

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

Andrea Manconi Riferimenti