SlideShare uma empresa Scribd logo
1 de 17
Lezione 7: Remote Method
         Invocation e SSL
         Corso di Programmazione in Rete
        Laurea Magistrale in Ing. Informatica
          Università degli Studi di Salerno



1
Outline

    ✦ Esecuzione del programma

    ✦ RMI e SSL




2
Esecuzione del programma


    ✦ Prima di lanciare il server occorre far
      partire il programma rmiregistry
     •   il programma deve partire dalla directory in cui si
         trovano i file .class




3
Passaggio dei parametri

    ✦ Nella chiamata a un metodo di un oggetto
      locale, Java usa i seguenti meccanismi
      per il passaggio dei parametri e del valore
      di ritorno:
     •   per i tipi atomici il passaggio è per valore
     •   per tutti gli altri tipi, il passaggio è per riferimento




4
Passaggio dei parametri
    ✦ Nel caso di oggetti remoti, le regole
      cambiano:
     •   per i tipi atomici il passaggio è per valore
     •   per gli oggetti che implementano un’interfaccia
         remota, il passaggio è per riferimento (remoto)
     •   per i tipi serializzabili che non implementano
         un’interfaccia remota il passaggio è per valore
     •   per tutti gli altri tipi, non è possibile utilizzarli
         come parametro o valore di ritorno di un metodo
         remoto


5
Passaggio dei parametri
    ✦ Conseguenze
     •   il comportamento di un metodo può cambiare a
         seconda se l’oggetto è locale oppure remoto
     •   il passaggio per valore di un oggetto può avere un
         impatto significativo sulle prestazioni, dal
         momento che comporta la trasmissione su rete di
         una versione serializzata dell’oggetto e di tutti gli
         oggetti ad esso collegati!
     •   il server deve avere accesso ai .class delle classi
         effettive dei parametri passati per valore
         ‣   non è sempre banale, per il polimorfismo


6
Passaggio dei parametri
    ✦ Esempio di codice che ha un effetto
      diverso in un oggetto locale o in un
      oggetto remoto
        	   public void copia(int src[], int dest[]) {
        	   	 for(int i=0; i<src.length; i++)
        	   	 	 dest[i]=src[i];
        	   }

    ✦ Infatti:
     ‣ in un oggetto locale, copia un array in un altro
       array (passaggio per riferimento)
     ‣ in un oggetto remoto, non ha nessun effetto
       (passaggio per valore)
7
RMI e SSL
    ✦ Per rendere sicura la comunicazione con
      un oggetto remoto è possibile usare
      socket SSL/TLS invece dei semplici socket
      TCP
    ✦ Per cambiare il tipo di socket usato per la
      connessione i passi sono:
     •   definire una factory per i server socket e una
         factory per i client socket
     •   specificare le factory da usare nel costruttore
         della classe di implementazione dell’oggetto
         remoto
8
RMIServerSocketFactory

    ✦ L’interfaccia RMIServerSocketFactory (del
      package java.rmi.server) rappresenta una
      factory da usare per creare i server
      socket associati a un oggetto remoto
    ✦ Le implementazioni devono definire il
      metodo:
     •   ServerSocket createServerSocket(int port)
                                    throws IOException



9
RMIServerSocketFactory
      ✦ Ad esempio, per creare socket SSL:

 import   java.io.*;
 import   java.net.*;
 import   javax.net.*;
 import   javax.net.ssl.*;
 import   java.rmi.server.*;

 public class RMISSLServerSocketFactory implements RMIServerSocketFactory {
 	 public ServerSocket createServerSocket(int port) throws IOException {
 	 	 ServerSocketFactory factory=SSLServerSocketFactory.getDefault();
 	 	 return factory.createServerSocket(port);
 	 }
 }




10
RMIClientSocketFactory
     ✦ Interfaccia usata dal client per la
       creazione del socket per connettersi
       all’oggetto, usando il metodo
      •   Socket createSocket(String host, int port)
                                   throws IOException
     ✦ L’istanza dell’implementazione viene
       definita dall’applicazione server e
       trasmessa al client quando richiede la
       connessione all’oggetto
      •   perciò l’implementazione deve anche essere
          Serializable
11
RMIClientSocketFactory
      ✦ Ad esempio, per creare socket SSL:

 import   java.io.*;
 import   java.net.*;
 import   javax.net.*;
 import   javax.net.ssl.*;
 import   java.rmi.server.*;

 public class RMISSLClientSocketFactory implements RMIClientSocketFactory, Serializable {
 	 public Socket createSocket(String host, int port) throws IOException {
 	 	 SocketFactory factory=SSLSocketFactory.getDefault();
 	 	 return factory.createSocket(host, port);
 	 }
 }




12
Uso delle factory
     ✦ Occorre passare al costruttore di
       UnicastRemoteObject la
       RMIClientSocketFactory e la
       RMIServerSocketFactory
      •   per questo occorre richiamare dal costruttore
          della classe di implementazione il costruttore:
              UnicastRemoteObject(int port,
                       RMIClientSocketFactory csf,
                       RMIServerSocketFactory ssf)
                            throws RemoteException


13
Uso delle factory
 import java.rmi.*;
      ✦ Ad esempio, per l’oggetto calcolatrice:
 import java.rmi.server.*;



 public class CalculatorImpl extends UnicastRemoteObject implements Calculator {
 	 public CalculatorImpl(RMIClientSocketFactory clientFactory,
                          RMIServerSocketFactory serverFactory) throws RemoteException {
 	 	 super(0, clientFactory, serverFactory);
 	 }
 	 public double add(double a, double b) {
 	 	 return a+b;
 	 }
 	 public double divide(double a, double b) {
 	 	 return a/b;
 	 }
 	 public double multiply(double a, double b) {
 	 	 return a*b;
 	 }
 	 public double subtract(double a, double b) {
 	 	 return a-b;
 	 }
 }


14
Modifiche al server
         ✦ Il server deve creare le factory definire le
           system properties per accedere al key
           store:
     import java.net.*;
     import java.rmi.*;
     import java.rmi.server.*;

     public class CalculatorServer {
     	 public static void main(String args[]) throws RemoteException, MalformedURLException {
     	 	 System.setProperty("javax.net.ssl.keyStore", "keystore.jks");
     	 	 System.setProperty("javax.net.ssl.keyStorePassword", "pippobaudo");
     	 	 RMIClientSocketFactory clientFactory=new RMISSLClientSocketFactory();
     	 	 RMIServerSocketFactory serverFactory=new RMISSLServerSocketFactory();
     	 	 Calculator calc=new CalculatorImpl(clientFactory, serverFactory);
     	 	 Naming.rebind("calc", calc);
     	 }
     }


15
Modifiche al client
         ✦ Il client deve soltanto definire le system
           properties per accedere al trust store:
     import java.net.*;
     import java.rmi.*;

     public class CalculatorClient {
     	 public static void main(String args[])
                         throws RemoteException, MalformedURLException, NotBoundException {
     	 	 System.setProperty("javax.net.ssl.trustStore", "truststore.jks");
     	 	 System.setProperty("javax.net.ssl.trustStorePassword", "pippobaudo");
     	 	 Calculator calc=(Calculator)Naming.lookup("rmi://localhost/calc");
     	 	 System.out.println("9 per 9 fa "+calc.multiply(9,9));
     	 }

     }




16
Modifiche al client
     ✦ Note
      •   è possibile che tra gli oggetti di uno stesso server
          alcuni usino socket SSL e altri socket normali
      •   il client non deve decidere quale tipo di socket
          usare per ciascun oggetto: il server provvede a
          passargli la factory appropriata
      •   il meccanismo delle factory può essere usato
          anche per usare altri meccanismi di
          comunicazione
          ‣   es. HTTP tunneling per le reti dotate di firewall



17

Mais conteúdo relacionado

Mais procurados

[ITA] Introduzione ai web services: SOAP, WSDL, UDDI
[ITA] Introduzione ai web services: SOAP, WSDL, UDDI[ITA] Introduzione ai web services: SOAP, WSDL, UDDI
[ITA] Introduzione ai web services: SOAP, WSDL, UDDIMarco Brambilla
 
Silverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteriaSilverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteriaMauro Servienti
 
Drupal Day 2011 - Node.js e Drupal
Drupal Day 2011 - Node.js e DrupalDrupal Day 2011 - Node.js e Drupal
Drupal Day 2011 - Node.js e DrupalDrupalDay
 
Simple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computingSimple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computingFrancesca1980
 
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e AjaxProgettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e AjaxGiovanni Cappellini
 
C# Chat for Windows: Network infrastructure + file sharing + clipboard sharin...
C# Chat for Windows: Network infrastructure + file sharing + clipboard sharin...C# Chat for Windows: Network infrastructure + file sharing + clipboard sharin...
C# Chat for Windows: Network infrastructure + file sharing + clipboard sharin...Francesco Corazza
 
Closure Visto Da Vicino
Closure Visto Da VicinoClosure Visto Da Vicino
Closure Visto Da Vicinodavide ficano
 
Progetto su iPhone - Seminario di Reti Wireless
Progetto su iPhone - Seminario di Reti WirelessProgetto su iPhone - Seminario di Reti Wireless
Progetto su iPhone - Seminario di Reti WirelessSilvio Daminato
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Eugenio Minardi
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Wellnet srl
 

Mais procurados (20)

Corso Java 2 - AVANZATO
Corso Java 2 - AVANZATOCorso Java 2 - AVANZATO
Corso Java 2 - AVANZATO
 
Corso di servlet jsp e pattern
Corso di servlet jsp e patternCorso di servlet jsp e pattern
Corso di servlet jsp e pattern
 
[ITA] Introduzione ai web services: SOAP, WSDL, UDDI
[ITA] Introduzione ai web services: SOAP, WSDL, UDDI[ITA] Introduzione ai web services: SOAP, WSDL, UDDI
[ITA] Introduzione ai web services: SOAP, WSDL, UDDI
 
Corso Javascript
Corso JavascriptCorso Javascript
Corso Javascript
 
Silverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteriaSilverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteria
 
Drupal Day 2011 - Node.js e Drupal
Drupal Day 2011 - Node.js e DrupalDrupal Day 2011 - Node.js e Drupal
Drupal Day 2011 - Node.js e Drupal
 
Corso web services
Corso web servicesCorso web services
Corso web services
 
Portlet JSR168/286
Portlet JSR168/286Portlet JSR168/286
Portlet JSR168/286
 
Simple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computingSimple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computing
 
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e AjaxProgettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
 
C# Chat for Windows: Network infrastructure + file sharing + clipboard sharin...
C# Chat for Windows: Network infrastructure + file sharing + clipboard sharin...C# Chat for Windows: Network infrastructure + file sharing + clipboard sharin...
C# Chat for Windows: Network infrastructure + file sharing + clipboard sharin...
 
Corso UML
Corso UMLCorso UML
Corso UML
 
Tutorial su Java RMI
Tutorial su Java RMITutorial su Java RMI
Tutorial su Java RMI
 
Javascript
JavascriptJavascript
Javascript
 
Closure Visto Da Vicino
Closure Visto Da VicinoClosure Visto Da Vicino
Closure Visto Da Vicino
 
Progetto su iPhone - Seminario di Reti Wireless
Progetto su iPhone - Seminario di Reti WirelessProgetto su iPhone - Seminario di Reti Wireless
Progetto su iPhone - Seminario di Reti Wireless
 
Ajax - Presente e futuro delle applicazioni web
Ajax - Presente e futuro delle applicazioni webAjax - Presente e futuro delle applicazioni web
Ajax - Presente e futuro delle applicazioni web
 
m-v-vm @ UgiAlt.Net
m-v-vm @ UgiAlt.Netm-v-vm @ UgiAlt.Net
m-v-vm @ UgiAlt.Net
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
 

Semelhante a Lezione 7: Remote Method Invocation e SSL

Primo Incontro Con Scala
Primo Incontro Con ScalaPrimo Incontro Con Scala
Primo Incontro Con ScalaFranco Lombardo
 
Le novita di visual studio 2012
Le novita di visual studio 2012Le novita di visual studio 2012
Le novita di visual studio 2012Crismer La Pignola
 
Webbit 2004: Tiger, java
Webbit 2004: Tiger, javaWebbit 2004: Tiger, java
Webbit 2004: Tiger, javaMatteo Baccan
 
Autenticazione delle api con jwt e symfony (Italian)
Autenticazione delle api con jwt e symfony (Italian)Autenticazione delle api con jwt e symfony (Italian)
Autenticazione delle api con jwt e symfony (Italian)Marco Albarelli
 
Installing Apache tomcat with Netbeans
Installing Apache tomcat with NetbeansInstalling Apache tomcat with Netbeans
Installing Apache tomcat with NetbeansDavide Nardone
 
Alla scoperta di gRPC
Alla scoperta di gRPCAlla scoperta di gRPC
Alla scoperta di gRPCAndrea Dottor
 
Lezione 4: Comunicazione con UDP
Lezione 4: Comunicazione con UDPLezione 4: Comunicazione con UDP
Lezione 4: Comunicazione con UDPAndrea Della Corte
 
Seam unifies Java EE by Massimiliano Ciccazzo
Seam unifies Java EE by Massimiliano CiccazzoSeam unifies Java EE by Massimiliano Ciccazzo
Seam unifies Java EE by Massimiliano CiccazzoJava User Group Roma
 
April 2010 - Seam unifies JEE5
April 2010 - Seam unifies JEE5April 2010 - Seam unifies JEE5
April 2010 - Seam unifies JEE5JBug Italy
 

Semelhante a Lezione 7: Remote Method Invocation e SSL (20)

Java lezione 14
Java lezione 14Java lezione 14
Java lezione 14
 
Hexagonal architecture ita
Hexagonal architecture itaHexagonal architecture ita
Hexagonal architecture ita
 
Yagwto
YagwtoYagwto
Yagwto
 
Primo Incontro Con Scala
Primo Incontro Con ScalaPrimo Incontro Con Scala
Primo Incontro Con Scala
 
Lezione 3: Connessioni TCP
Lezione 3: Connessioni TCPLezione 3: Connessioni TCP
Lezione 3: Connessioni TCP
 
#dd12 Applicazioni a tre voci (Android e Domino)
#dd12 Applicazioni a tre voci (Android e Domino)#dd12 Applicazioni a tre voci (Android e Domino)
#dd12 Applicazioni a tre voci (Android e Domino)
 
App Engine + Python
App Engine + PythonApp Engine + Python
App Engine + Python
 
J huery
J hueryJ huery
J huery
 
Applicazioni native in java
Applicazioni native in javaApplicazioni native in java
Applicazioni native in java
 
Le novita di visual studio 2012
Le novita di visual studio 2012Le novita di visual studio 2012
Le novita di visual studio 2012
 
Php mysql3
Php mysql3Php mysql3
Php mysql3
 
Webbit 2004: Tiger, java
Webbit 2004: Tiger, javaWebbit 2004: Tiger, java
Webbit 2004: Tiger, java
 
Autenticazione delle api con jwt e symfony (Italian)
Autenticazione delle api con jwt e symfony (Italian)Autenticazione delle api con jwt e symfony (Italian)
Autenticazione delle api con jwt e symfony (Italian)
 
Installing Apache tomcat with Netbeans
Installing Apache tomcat with NetbeansInstalling Apache tomcat with Netbeans
Installing Apache tomcat with Netbeans
 
Alla scoperta di gRPC
Alla scoperta di gRPCAlla scoperta di gRPC
Alla scoperta di gRPC
 
introduzione a symfony 2
introduzione a symfony 2 introduzione a symfony 2
introduzione a symfony 2
 
Lezione 4: Comunicazione con UDP
Lezione 4: Comunicazione con UDPLezione 4: Comunicazione con UDP
Lezione 4: Comunicazione con UDP
 
Seam unifies Java EE by Massimiliano Ciccazzo
Seam unifies Java EE by Massimiliano CiccazzoSeam unifies Java EE by Massimiliano Ciccazzo
Seam unifies Java EE by Massimiliano Ciccazzo
 
April 2010 - Seam unifies JEE5
April 2010 - Seam unifies JEE5April 2010 - Seam unifies JEE5
April 2010 - Seam unifies JEE5
 
Novità di Asp.Net 4.0
Novità di Asp.Net 4.0Novità di Asp.Net 4.0
Novità di Asp.Net 4.0
 

Mais de Andrea Della Corte

Lezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern ComportamentaliLezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern ComportamentaliAndrea Della Corte
 
Lezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern ComportamentaliLezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern ComportamentaliAndrea Della Corte
 
Lezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern ComportamentaliLezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern ComportamentaliAndrea Della Corte
 
Lezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern StrutturaliLezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern StrutturaliAndrea Della Corte
 
Lezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern StrutturaliLezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern StrutturaliAndrea Della Corte
 
Lezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern CreazionaliLezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern CreazionaliAndrea Della Corte
 
Lezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e SubversionLezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e SubversionAndrea Della Corte
 
Lezione 3: Sviluppo in Extreme Programming
Lezione 3: Sviluppo in Extreme ProgrammingLezione 3: Sviluppo in Extreme Programming
Lezione 3: Sviluppo in Extreme ProgrammingAndrea Della Corte
 
Lezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme ProgrammingLezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme ProgrammingAndrea Della Corte
 

Mais de Andrea Della Corte (14)

Lezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern ComportamentaliLezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern Comportamentali
 
Lezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern ComportamentaliLezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern Comportamentali
 
Lezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern ComportamentaliLezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern Comportamentali
 
Lezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern StrutturaliLezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern Strutturali
 
Lezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern StrutturaliLezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern Strutturali
 
Lezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern CreazionaliLezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern Creazionali
 
Lezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e SubversionLezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e Subversion
 
Lezione 3: Sviluppo in Extreme Programming
Lezione 3: Sviluppo in Extreme ProgrammingLezione 3: Sviluppo in Extreme Programming
Lezione 3: Sviluppo in Extreme Programming
 
Lezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme ProgrammingLezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme Programming
 
Lezione 1: I metodi agili
Lezione 1: I metodi agiliLezione 1: I metodi agili
Lezione 1: I metodi agili
 
Lezione 1: I/O in Java
Lezione 1: I/O in JavaLezione 1: I/O in Java
Lezione 1: I/O in Java
 
Lezione 2: I thread
Lezione 2: I threadLezione 2: I thread
Lezione 2: I thread
 
Tutorial Matlab 2009
Tutorial Matlab 2009Tutorial Matlab 2009
Tutorial Matlab 2009
 
Introduzione ai CRM
Introduzione ai CRMIntroduzione ai CRM
Introduzione ai CRM
 

Último

case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....giorgiadeascaniis59
 
Presentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione CivicaPresentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione CivicaSalvatore Cianciabella
 
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxNicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxlorenzodemidio01
 
Scrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibileScrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibileNicola Rabbi
 
LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................giorgiadeascaniis59
 
Aristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptxAristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptxtecongo2007
 
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptxLorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptxlorenzodemidio01
 
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptxLorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptxlorenzodemidio01
 
Quadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceoQuadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceoyanmeng831
 
discorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptxdiscorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptxtecongo2007
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxlorenzodemidio01
 
Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................giorgiadeascaniis59
 
Descrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptxDescrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptxtecongo2007
 
Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.camillaorlando17
 
Tosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptxTosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptxlorenzodemidio01
 
descrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptxdescrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptxtecongo2007
 
Lorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptxLorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptxlorenzodemidio01
 
Lorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptxLorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptxlorenzodemidio01
 

Último (18)

case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....
 
Presentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione CivicaPresentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione Civica
 
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxNicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
 
Scrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibileScrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibile
 
LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................
 
Aristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptxAristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptx
 
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptxLorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
 
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptxLorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
 
Quadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceoQuadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceo
 
discorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptxdiscorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptx
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
 
Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................
 
Descrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptxDescrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptx
 
Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.
 
Tosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptxTosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptx
 
descrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptxdescrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptx
 
Lorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptxLorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptx
 
Lorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptxLorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptx
 

Lezione 7: Remote Method Invocation e SSL

  • 1. Lezione 7: Remote Method Invocation e SSL Corso di Programmazione in Rete Laurea Magistrale in Ing. Informatica Università degli Studi di Salerno 1
  • 2. Outline ✦ Esecuzione del programma ✦ RMI e SSL 2
  • 3. Esecuzione del programma ✦ Prima di lanciare il server occorre far partire il programma rmiregistry • il programma deve partire dalla directory in cui si trovano i file .class 3
  • 4. Passaggio dei parametri ✦ Nella chiamata a un metodo di un oggetto locale, Java usa i seguenti meccanismi per il passaggio dei parametri e del valore di ritorno: • per i tipi atomici il passaggio è per valore • per tutti gli altri tipi, il passaggio è per riferimento 4
  • 5. Passaggio dei parametri ✦ Nel caso di oggetti remoti, le regole cambiano: • per i tipi atomici il passaggio è per valore • per gli oggetti che implementano un’interfaccia remota, il passaggio è per riferimento (remoto) • per i tipi serializzabili che non implementano un’interfaccia remota il passaggio è per valore • per tutti gli altri tipi, non è possibile utilizzarli come parametro o valore di ritorno di un metodo remoto 5
  • 6. Passaggio dei parametri ✦ Conseguenze • il comportamento di un metodo può cambiare a seconda se l’oggetto è locale oppure remoto • il passaggio per valore di un oggetto può avere un impatto significativo sulle prestazioni, dal momento che comporta la trasmissione su rete di una versione serializzata dell’oggetto e di tutti gli oggetti ad esso collegati! • il server deve avere accesso ai .class delle classi effettive dei parametri passati per valore ‣ non è sempre banale, per il polimorfismo 6
  • 7. Passaggio dei parametri ✦ Esempio di codice che ha un effetto diverso in un oggetto locale o in un oggetto remoto public void copia(int src[], int dest[]) { for(int i=0; i<src.length; i++) dest[i]=src[i]; } ✦ Infatti: ‣ in un oggetto locale, copia un array in un altro array (passaggio per riferimento) ‣ in un oggetto remoto, non ha nessun effetto (passaggio per valore) 7
  • 8. RMI e SSL ✦ Per rendere sicura la comunicazione con un oggetto remoto è possibile usare socket SSL/TLS invece dei semplici socket TCP ✦ Per cambiare il tipo di socket usato per la connessione i passi sono: • definire una factory per i server socket e una factory per i client socket • specificare le factory da usare nel costruttore della classe di implementazione dell’oggetto remoto 8
  • 9. RMIServerSocketFactory ✦ L’interfaccia RMIServerSocketFactory (del package java.rmi.server) rappresenta una factory da usare per creare i server socket associati a un oggetto remoto ✦ Le implementazioni devono definire il metodo: • ServerSocket createServerSocket(int port) throws IOException 9
  • 10. RMIServerSocketFactory ✦ Ad esempio, per creare socket SSL: import java.io.*; import java.net.*; import javax.net.*; import javax.net.ssl.*; import java.rmi.server.*; public class RMISSLServerSocketFactory implements RMIServerSocketFactory { public ServerSocket createServerSocket(int port) throws IOException { ServerSocketFactory factory=SSLServerSocketFactory.getDefault(); return factory.createServerSocket(port); } } 10
  • 11. RMIClientSocketFactory ✦ Interfaccia usata dal client per la creazione del socket per connettersi all’oggetto, usando il metodo • Socket createSocket(String host, int port) throws IOException ✦ L’istanza dell’implementazione viene definita dall’applicazione server e trasmessa al client quando richiede la connessione all’oggetto • perciò l’implementazione deve anche essere Serializable 11
  • 12. RMIClientSocketFactory ✦ Ad esempio, per creare socket SSL: import java.io.*; import java.net.*; import javax.net.*; import javax.net.ssl.*; import java.rmi.server.*; public class RMISSLClientSocketFactory implements RMIClientSocketFactory, Serializable { public Socket createSocket(String host, int port) throws IOException { SocketFactory factory=SSLSocketFactory.getDefault(); return factory.createSocket(host, port); } } 12
  • 13. Uso delle factory ✦ Occorre passare al costruttore di UnicastRemoteObject la RMIClientSocketFactory e la RMIServerSocketFactory • per questo occorre richiamare dal costruttore della classe di implementazione il costruttore: UnicastRemoteObject(int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) throws RemoteException 13
  • 14. Uso delle factory import java.rmi.*; ✦ Ad esempio, per l’oggetto calcolatrice: import java.rmi.server.*; public class CalculatorImpl extends UnicastRemoteObject implements Calculator { public CalculatorImpl(RMIClientSocketFactory clientFactory, RMIServerSocketFactory serverFactory) throws RemoteException { super(0, clientFactory, serverFactory); } public double add(double a, double b) { return a+b; } public double divide(double a, double b) { return a/b; } public double multiply(double a, double b) { return a*b; } public double subtract(double a, double b) { return a-b; } } 14
  • 15. Modifiche al server ✦ Il server deve creare le factory definire le system properties per accedere al key store: import java.net.*; import java.rmi.*; import java.rmi.server.*; public class CalculatorServer { public static void main(String args[]) throws RemoteException, MalformedURLException { System.setProperty("javax.net.ssl.keyStore", "keystore.jks"); System.setProperty("javax.net.ssl.keyStorePassword", "pippobaudo"); RMIClientSocketFactory clientFactory=new RMISSLClientSocketFactory(); RMIServerSocketFactory serverFactory=new RMISSLServerSocketFactory(); Calculator calc=new CalculatorImpl(clientFactory, serverFactory); Naming.rebind("calc", calc); } } 15
  • 16. Modifiche al client ✦ Il client deve soltanto definire le system properties per accedere al trust store: import java.net.*; import java.rmi.*; public class CalculatorClient { public static void main(String args[]) throws RemoteException, MalformedURLException, NotBoundException { System.setProperty("javax.net.ssl.trustStore", "truststore.jks"); System.setProperty("javax.net.ssl.trustStorePassword", "pippobaudo"); Calculator calc=(Calculator)Naming.lookup("rmi://localhost/calc"); System.out.println("9 per 9 fa "+calc.multiply(9,9)); } } 16
  • 17. Modifiche al client ✦ Note • è possibile che tra gli oggetti di uno stesso server alcuni usino socket SSL e altri socket normali • il client non deve decidere quale tipo di socket usare per ciascun oggetto: il server provvede a passargli la factory appropriata • il meccanismo delle factory può essere usato anche per usare altri meccanismi di comunicazione ‣ es. HTTP tunneling per le reti dotate di firewall 17