Netzprogrammierung: Java RMI - Remote Method Invocation (Teil 2)



Ähnliche Dokumente
Netzprogrammierung: Java RMI - Remote Method Invocation (Teil 3)

Java RMI Remote Method Invocation

Klaus-Peter Löhr! 8 Java RMI!

Remote Method Invocation

7.1.5 Java RMI Remote Method Invocation ( (

Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API).

8.1.5 Java RMI Remote Method Invocation

Der lokale und verteilte Fall

Java-Programmierung. Remote Method Invocation - RMI

Netzprogrammierung: Java RMI - Remote Method Invocation (Teil 1)

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014)

Java: Vererbung. Teil 3: super()

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Übung: Verwendung von Java-Threads

.htaccess HOWTO. zum Schutz von Dateien und Verzeichnissen mittels Passwortabfrage

Verwendung des Terminalservers der MUG

ICS-Addin. Benutzerhandbuch. Version: 1.0

Karten-Freischaltung mit dem UNLOCK MANAGER

Um über FTP Dateien auf Ihren Public Space Server - Zugang laden zu können benötigen Sie folgende Angaben:

INHALT 1. INSTALLATION DES V-MODELL XT UNTER WINDOWS 7 2. INSTALLATION DES V-MODELL XT UNTER WINDOWS VISTA

Er musste so eingerichtet werden, dass das D-Laufwerk auf das E-Laufwerk gespiegelt

Lizenzen auschecken. Was ist zu tun?

FTP-Server einrichten mit automatischem Datenupload für

crm-now/ps Webforms Webdesigner Handbuch Erste Ausgabe

Installation der SAS Foundation Software auf Windows

Powermanager Server- Client- Installation

Programmieren in Java

Gemeinsamer Bibliotheksverbund: Übertragung von Datenexporten für den Verbundkatalog Öffentlicher Bibliotheken

Professionelle Seminare im Bereich MS-Office

Sie müssen sich für diesen Fall mit IHREM Rechner (also zeitgut jk o.ä.) verbinden, nicht mit dem Terminalserver.

Anleitung Captain Logfex 2013

Einführung in die Programmierung

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Berechtigungen im Kalender Anleitung für die Rechtevergabe im Outlook Kalender FHNW, Services, ICT

Task: Nmap Skripte ausführen

RT Request Tracker. Benutzerhandbuch V2.0. Inhalte

Loggen Sie sich in Ihrem teamspace Team ein, wechseln Sie bitte zur Verwaltung und klicken Sie dort auf den Punkt Synchronisation.

Gibt Daten im erweiterten Format aus. Dies beinhaltet die Angabe von Zugriffsrechten, Besitzer, Länge, Zeitpunkt der letzten Änderung und mehr.

Kundeninformation PDF-Erzeugung in Adobe Illustrator, Adobe InDesign und QuarkXPress Datenprüfung und Datenübergabe

Magento MultiStore einrichten unter ispcp

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7

Das sogenannte Beamen ist auch in EEP möglich ohne das Zusatzprogramm Beamer. Zwar etwas umständlicher aber es funktioniert

Tutorial -

EasyWk DAS Schwimmwettkampfprogramm

Schrittweise Anleitung zur Installation von Zertifikaten der Bayerischen Versorgungskammer im Mozilla Firefox ab Version 2.0

Blogbeitrag: Installation eines SAP CRM-Systems

Übungen zu Softwaretechnik

MORE Profile. Pass- und Lizenzverwaltungssystem. Stand: MORE Projects GmbH

Anlegen eines SendAs/RecieveAs Benutzer unter Exchange 2003, 2007 und 2010

COSIDNS 2 ISPconfig3. Version 0.1 ( )

Prinzipien Objektorientierter Programmierung

e-books aus der EBL-Datenbank

PHPNuke Quick & Dirty

Objektorientierte Programmierung für Anfänger am Beispiel PHP

DOKUMENTATION VOGELZUCHT 2015 PLUS

Migration Howto. Inhaltsverzeichnis

Internet Explorer Version 6

KURZANLEITUNG CLOUD OBJECT STORAGE

Anwendungsbeispiele Buchhaltung

Upgrade auf die Standalone Editionen von Acronis Backup & Recovery 10. Technische Informationen (White Paper)

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

1 Einleitung. Lernziele. Symbolleiste für den Schnellzugriff anpassen. Notizenseiten drucken. eine Präsentation abwärtskompatibel speichern

Fax einrichten auf Windows XP-PC

Benutzerhandbuch. Leitfaden zur Benutzung der Anwendung für sicheren Dateitransfer.

8.1.6.NET Remoting. C# ( Csharp, Cis ) : Referenzsprache für.net,

25 Import der Beispiele

Step by Step Softwareverteilung unter Novell. von Christian Bartl

WinVetpro im Betriebsmodus Laptop

Netzwerkinstallation WaWi-Profi3

Tapps mit XP-Mode unter Windows 7 64 bit (V2.0)

PC Hack erkennen 3 - Rootkits & versteckte Trojaner aufspühren

Software-Lizenzierung und Aktivierung: Verteilen von Software mit Apple Remote Desktop

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Suche schlecht beschriftete Bilder mit Eigenen Abfragen

Anleitung über den Umgang mit Schildern

MSXFORUM - Exchange Server 2003 > SMTP Konfiguration von Exchange 2003

Kleines Handbuch zur Fotogalerie der Pixel AG

Anleitung zum Prüfen von WebDAV

Anleitung zum Computercheck Windows Firewall aktivieren oder eine kostenlose Firewall installieren

Software Engineering Klassendiagramme Assoziationen

L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016

Innere Klassen in Java

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten

! " # $ " % & Nicki Wruck worldwidewruck

WebService in Java SE und EE

Inhalt: Ihre persönliche Sedcard... 1 Login... 1 Passwort vergessen... 2 Profildaten bearbeiten... 3

Installation eines BM-33k6/ISDN pro USB an einem Windows XP-Rechner

Wissenswertes über LiveUpdate

TIC Antispam und Virus Filterungs Service. Übersicht zu den Admin-Level Funktionen

Kulturobjekte der Donau Das ContentManagementSystem (CMS)

Große Übung Praktische Informatik 1

Eine Einführung in die Installation und Nutzung von cygwin

Dieses HowTo darf nicht vervielfältigt oder veröffentlich werden ohne Einverständnis des Erstellers. Alle Angaben ohne Gewähr.

Step by Step Webserver unter Windows Server von Christian Bartl

Komponententechnologien Winter 2016/17. Komponenten. 2. Die Anfänge. Peter Sturm, Universität Trier 1

TechNote. Produkt: TWINFAX 7.0 (ab CD_24), TWINFAX 6.0 Modul: SMTP, T611, R3 Kurzbeschreibung: Briefpapier- und Mailbodyunterstützung

Leitfaden zur Einrichtung za-mail mit IMAP auf dem iphone

Transkript:

Netzprogrammierung: Java RMI - Remote Method Invocation (Teil 2) Robert Tolksdorf und Peter Löhr

Überblick 1. Auffinden von.class-dateien 2. Serializable Parameter 3. Sicherheit 4. Code laden übers Web Zur Erinnerung - Dokumentation RMI: http://java.sun.com/javase/6/docs/platform/rmi/spec/rmitoc.html http://java.sun.com/docs/books/tutorial/rmi/ Robert Tolksdorf und Peter Löhr 2

Auffinden von.class-dateien Robert Tolksdorf und Peter Löhr

Nochmal Beispiel Counter Zur Erinnerung - Beispiel Counter: Schnittstelle Anbieter Klient Counter.java CounterImpl.java Inc.java ann@server:~/anncount $ javac CounterImpl.java ann@server:~/anncount $ rm *.java ann@server:~/anncount $ ls more Counter.class CounterImpl.class ann@server:~/anncount $ bob@client:~/bobcount $ javac Inc.java (... getregistry("server");...) bob@client:~/bobcount $ rm *.java bob@client:~/bobcount $ ls more Counter.class Inc.class bob@client:~/bobcount $ Robert Tolksdorf und Peter Löhr 4

Nochmal Beispiel Counter ann@server:~ann/anncount $ rmiregistry & [1] 8774 ann@server:~ann/anncount $ java CounterImpl & [1] 8777 ann@server:~ann/anncount $ Dies scheitert, wenn im Klassenpfad des rmiregistry (!) die Counter.class nicht gefunden wird! bob@client:~/bobcount $ java Inc 5 counter is 5 bob@client:~/bobcount $ Robert Tolksdorf und Peter Löhr 5

.class-dateien über das Web laden Saubere Lösung mit vollständiger Entkoppelung des Registry von den zu verwaltenden Objekten: eve@server:~ $ rmiregistry & [1] 8774 eve@server:~ $ (am besten ohne CLASSPATH) ann@server:~ann/anncount $ java \ > -Djava.rmi.server.codebase=http://page.mi.fu-berlin.de/~ann/classes/ \ > CounterImpl & [1] 8777 ann@server:~ann/anncount $ Codebasis für Registry ( server ) wird durch URL identifiziert. Counter.class wird in classes vorgehalten. Robert Tolksdorf und Peter Löhr 6

Serializable Parameter Robert Tolksdorf und Peter Löhr

Remote versus Serializable Zur Erinnerung - Fernaufruf-Parameter mit Verweistyp: Wenn der aktuelle Parameter Remote ist: Übergabe eines Fernverweises. Wenn der aktuelle Parameter nicht Remote, aber Serializable ist: Übergabe einer Objektkopie. Sonst: Laufzeitfehler MarshalException. Robert Tolksdorf und Peter Löhr 8

Code nachladen Übergabe einer Kopie eines Serializable Objekts - wie kommt der Empfänger zum Code des Objekts? Kein Problem, wenn Klasse beim Empfänger vorhanden, genauer: wenn dort über CLASSPATH erreichbar; wenn nicht, eventuell java -cp <classpath> einsetzbar, wenn Sender und Empfänger im gleichen Dateisystem. Fernladen: Häufig liegt die Klasse in einem fremden Dateisystem auf einem anderem Rechner, typischerweise am Ort des entfernten Objekts. Dann kann der Code mit einer URL identifiziert und über das Web geladen werden (s.u.). Achtung - Sicherheitsprobleme bei Verwendung fremden Codes! Robert Tolksdorf und Peter Löhr 9

Beispiel: Fernaufrufbares Factory-Objekt zur Erzeugung von Serializable Objekten, die die Klienten sich per Fernaufruf beschaffen können. Die Klienten wissen nichts von der Implementierung - und wollen auch nichts davon wissen.... implements Factory... new... data code Netzdateisystem:? code data code Robert Tolksdorf und Peter Löhr 10

Beispiel: Fabrik für Echo-Objekte interface Echo { // is not Remote! void print(); // print echo } import java.rmi.*; interface Factory extends Remote { Echo create(string s) throws RemoteException; } // creates an echo of s anna als Anbieter der Fabrik stellt den Benutzern lediglich diese zwei Schnittstellen zur Verfügung. import java.io.serializable; public class EchoImpl implements Echo, Serializable { public EchoImpl(String s) { echo = s; } String echo; import java.rmi.server.unicastremoteobject; public void print() { import java.rmi.registry.locateregistry; System.out.println(echo); import java.rmi.registry.registry; } public class EchoFactory implements Factory { } public Echo create(string s) { return new EchoImpl(s.substring(1,s.length())); } public static void main(string[] arg) throws Exception { Robert Tolksdorf und Peter Löhr Factory f = new EchoFactory(); 11 Factory stub = (Factory) UnicastRemoteObject.exportObje Registry registry = LocateRegistry.getRegistry(); registry.bind("factory", stub);

Beispiel: Fabrik für Echo-Objekte Mit Kenntnis der Schnittstellen (und des Namens der Fabrik im Registry) verfasst der Benutzer paul ein Klientenprogramm: import java.rmi.registry.locateregistry; import java.rmi.registry.registry; public class Test { public static void main(string[] arg) throws Exception{ Registry registry = LocateRegistry.getRegistry(); Factory f = (Factory) registry.lookup("factory"); Echo x = f.create(arg[0]); // delivers copy! x.print(); // local call! } } Robert Tolksdorf und Peter Löhr 12

Test mit Netzdateisystem anna@human:~/echo/classes $ ls more Echo.class EchoFactory.class EchoImpl.class Factory.class anna@human:~/echo/classes $ rmiregistry & [1] 1373 anna@human:~/echo/classes $ java EchoFactory & [2] 1374 anna@human:~/echo/classes $ paul@troll:~/test/classes $ ls more Echo.class Factory.class Test.class paul@troll:~/test/classes $ java Test wesel Exception in thread "main" java.rmi.unmarshalexception: error unmarshalling return; nested exception is: java.lang.classnotfoundexception: EchoImpl... Robert Tolksdorf und Peter Löhr 13

Test mit Netzdateisystem Reparieren: paul@troll:~/test/classes $ ls more Echo.class Factory.class Test.class paul@troll:~/test/classes $ java -cp.:/home/anna/echo/classes Test wesel esel paul@troll:~/test/classes $ (Damit sind übrigens auch diese entbehrlich!) Achtung: paul muss auf die Dateien in /home/anna/echo/classes Lesezugriff haben - sonst gibt es wiederum eine java.lang.classnotfoundexception: EchoImpl Robert Tolksdorf und Peter Löhr 14

Entfernte Benutzung der Fabrik Bei Benutzung der Fabrik von einem fremden Dateisystem aus (evtl. Firewall mit VPN umgehen) muss der Code von EchoImpl mit dem RMI-Klassenlader über das Web heruntergeladen werden. Die URL der entsprechenden Codebasis wird von der Fabrik mit dem EchoImpl-Objekt mitgeliefert (s.u.). paul@xyz:~/test/classes $ java Test wesel Exception in thread "main" java.rmi.unmarshalexception: error unmarshalling return; nested exception is: java.lang.classnotfoundexception: EchoImpl (no security manager: RMI class loader disabled)... Das Nachladen von Code über das Web wird verweigert, wenn kein Security Manager installiert ist! Robert Tolksdorf und Peter Löhr 15

Sicherheit http://java.sun.com/javase/6/docs/technotes/guides/security/ http://java.sun.com/docs/books/tutorial/security/ Robert Tolksdorf und Peter Löhr

Vorsicht vor Schadcode! Fremder Code verhält sich vielleicht anders als erwartet! Schadcode (malware) hat unerwünschte Funktionalität, die dem Benutzer Schaden zufügen kann. Typisch sind: Trojanische Pferde - haben zwar die gewünschte Funktionalität, aber zusätzlich (und verdeckt) eine schädliche Funktionalität; Viren - sind Schadcode, der zusätzlich zu seiner schädlichen Funktionalität auch anderen - bislang unschädlichen - Code infiziert.! Sicherheitsbewusstes Verhalten: keinen Code benutzen, den man nicht selbst geschrieben hat oder dessen Autor man vertraut (?) oder der erfahrungsgemäß richtig funktioniert (??). Robert Tolksdorf und Peter Löhr 17

EchoImpl ein Trojanisches Pferd? Zur Erinnerung (S. 14): bei der Ausführung des Programms Test paul@troll:~/test/classes $ java -cp.:/home/anna/echo/classes Test wesel esel holt paul sich eventuell ein Trojanisches Pferd von anna ins Haus: Der Code der von der Echo-Fabrik gelieferten EchoImpl-Objektkopie produziert zwar das erwartete Echo, könnte aber auch Schadcode enthalten, der Dateien zerstört, Dateiinhalte kopiert, etc. etc. Robert Tolksdorf und Peter Löhr 18

Security Manager Schutz vor fremdem Schadcode wird durch Mitlaufenlassen eines Security Manager ermöglicht: $ java -Djava.security.manager... Security Manager folgt benutzerdefinierten Richtlinien (policies), die in entsprechenden Richtlinien-Dateien bereitgestellt sind: ~/.java.policy (privat) $JAVAHOME/jre/lib/security/java.policy (global)... und andere, explizit benannte Dateien Eine Richtlinien-Datei (policy file) enthält eine Menge von Berechtigungen (Erlaubissen, permissions), die für Code verschiedener Herkunft verschiedene Aktionen erlauben.! Was nicht erlaubt ist, ist verboten. Wenn keine Richtlinien-Datei vorliegt, ist nichts erlaubt! Robert Tolksdorf und Peter Löhr 19

Richtlinien-Datei Beispiel für eine einfache Richtlinien-Datei mypolicy von bob: grant codebase "file:${user.home}/-" { permission java.security.allpermission; }; grant codebase "file:/usr/ann/classes/*" { permission java.io.filepermission "/usr/bob/help/*", "read"; permission java.net.socketpermission "localhost:1024-", "connect, accept"; } grant { // allows any code to read in pub subtree permission java.io.filepermission "/usr/bob/pub/-", "read"; }; Benutzung z.b. so: bob: java -Djava.security.manager \ > -Djava.security.policy=mypolicy... Robert Tolksdorf und Peter Löhr 20

Richtlinien-Datei bearbeiten Fensterbasierte Bearbeitung von Richtlinien-Dateien: lohr: policytool --> http://java.sun.com/javase/6/docs/technotes/guides/security/policyfiles.html http://java.sun.com/javase/6/docs/technotes/guides/security/permissions.html Robert Tolksdorf und Peter Löhr 21

Beispiel: System Property erfragen import java.lang.*; import java.security.*; class GetProps { // from http://java.sun.com/docs/books/tutorial/security/ public static void main(string[] args) throws Exception { s = System.getProperty("user.home", "not specified"); System.out.println(" Your user home directory is: " + s); } } $ java GetProps Your user home directory is: /Users/lohr $ java -Djava.security.manager GetProps Exception in thread "main" java.security.accesscontrolexception: access denied (java.util.propertypermission user.home read)... $ Robert Tolksdorf und Peter Löhr 22

Beispiel: System Property erfragen Geeignete Richtlinien-Datei mypolicy in getprops einrichten: grant codebase "file:/users/lohr/samples/getprops/*" { permission java.util.propertypermission "user.home", "read"; }; Und dann: $ ls more GetProps.class GetProps.java mypolicy $ java -Djava.security.manager -Djava.security.policy=mypolicy GetProps Your user home directory is: /Users/lohr $ Robert Tolksdorf und Peter Löhr 23

Security Manager programmatisch Ein Security Manager kann auch per Programm gesetzt werden: public static void main(string[] arg) { if (System.getSecurityManager() == null) System.setSecurityManager(new SecurityManager());... } Damit ist sichergestellt, dass ein Security Manager garantiert vorhanden ist. Robert Tolksdorf und Peter Löhr 24

Code laden übers Web http://java.sun.com/javase/6/docs/technotes/guides/rmi/codebase.html Robert Tolksdorf und Peter Löhr

Codebasis im Web Zur Erinnerung: mit CLASSPATH oder mit der Option -cp kann man sich nur auf Dateien im eigenen Dateisystem (bzw. Netzdateisystem) beziehen. Das Nachladen von Code (.class-dateien oder.jar-dateien) aus fremden Dateisystemen ist nur über das Web möglich: Ausnutzung vorhandener Infrastruktur (HTTP-Protokoll) keine Probleme mit Firewalls Somit wird eine URL verwendet, um ein Verzeichnis, das als Codebasis (codebase) dienen soll, zu identifizieren. Achtung: Da die Firewall zwischen Internet und Intranet i.a. nur den Verkehr über wenige Standard-Ports erlaubt, braucht man VPN für intranet-überschreitendes RMI! Robert Tolksdorf und Peter Löhr 26

Entfernte Benutzung der Echo-Fabrik Revision des Ansatzes von S. 15: Anbieter: Benutzer lohr auf human.inf.fu-berlin.de Klient: anderer lohr auf PC über VPN mit diesen Richtlinien testpolicy : grant codebase "file:/users/lohr/-" { permission java.security.allpermission; }; grant codebase "http://page.mi.fu-berlin.de/~lohr/classes/-" { permission....... }; Hierfür sollten Berechtigungen nur sehr restriktiv vergeben werden! In unserem Fall sollte der Eintrag sogar ganz weggelassen werden, weil die print-methode von EchoImpl keine Berechtigungen benötigt; damit sind wir vor Trojanischem Code geschützt! Robert Tolksdorf und Peter Löhr 27

Randbedingungen Die URL einer Codebasis im Web bezeichnet ein Verzeichnis, das entweder die Klassendateien (.class) in Unterverzeichnissen gemäß der Paketstruktur enthält oder eine entsprechende Archivdatei (.jar) enthält. Für das Echo-Beispiel wählen wir eine einfache Paketisierung: echo enthält die Schnittstellen Echo und Factory ; factory enthält die Klassen EchoImpl und EchoFactory ; echotest enthält die Klasse Test. Beim Start der Fabrik EchoFactory muss die Codebasis angegeben werden, über die der Empfänger eines Echo- Objekts sich den zugehörigen Code beschaffen kann (vgl.s.6): -Djava.rmi.server.codebase=http://page.mi.fu-berlin.de/~lohr/classes/ Achtung: eine solche Angabe ist bei allen Programmen erforderlich, die Serializable Objekte verschicken, sei es als Argument oder als Ergebnis! Robert Tolksdorf und Peter Löhr 28

Anbieterseitige Situation Die Codebasis im Web: human: cd /web/page.mi.fu-berlin.de/web-home/lohr/public_html/classes human: ls * echo: Factory.class (die beim Registry benötigte Schnittstelle - vgl. S. 6) factory: EchoImpl.class (die bei Klienten benötigte Klasse) Der vollständige Code für die Echo-Fabrik: human: cd... human: ls * echo: Echo.class Factory.class factory: EchoFactory.class EchoImpl.class Robert Tolksdorf und Peter Löhr 29

Starten der Echo-Fabrik human : rmiregistry & [1] 24365 human: java -Djava.rmi.server.codebase=\ > http://page.mi.fu-berlin.de/~lohr/classes/ \ > factory/echofactory & [2] 24395 human: Robert Tolksdorf und Peter Löhr 30

Test der Echo-Fabrik lohr@lohr: cd... lohr@lohr: ls * testpolicy echo: Echo.class Factory.class echotest: Test.class lohr@lohr: java -Djava.security.manager \ > -Djava.security.policy=testpolicy \ > echotest/test wesel esel lohr@lohr: Robert Tolksdorf und Peter Löhr 31

Ein weiteres Beispiel (aus http://java.sun.com/docs/books/tutorial/rmi/ ) Rechenintensiven Code execute eines Klienten von einem Anbieter auf leistungsfähiger Maschine ausführen lassen: public interface Task<T> { T execute(); } // not Remote Anbieter kann über generische Methode executetask angesprochen werden: public interface Compute extends Remote { <T> T executetask(task<t> t) throws RemoteException; } Robert Tolksdorf und Peter Löhr 32

... und der Klient Die Rechenaufgabe des Klienten: public class Heavy implements Task<Result>, Serializable {...}... und das Rahmenprogramm: public class HeavyComputing { public static void main(string arg[]) {... Compute comp = (Compute)registry.lookup("compute"); Result result = comp.executetask(new Heavy(...));... } } Robert Tolksdorf und Peter Löhr 33

Hier statt Berechnung von Heavy Berechnung von Pi mit HeavyComputing mit ComputePi Code-Übertragung in andere Richtung als bei Echo-Beispiel! implements Compute Robert Tolksdorf und Peter Löhr 34

Allgemeine Situation Robert Tolksdorf und Peter Löhr 35

Zusammenfassung Robert Tolksdorf und Peter Löhr

Zusammenfassung Auffinden von.class-dateien classpath bei rmiregistry, Anbieter und Klient beachten! ggfls. Codebasis im Web für rmiregistry vorhalten vorzugsweise mit.jar-dateien arbeiten Serialisierbare Parameter Empfänger erhält Verweis auf lokale Kopie eventuell muss auch Code übertragen werden Sicherheit Schutz vor Trojanischem Code Security Manager und Richtlinien-Dateien Code laden übers Web nur mit Security Manager Robert Tolksdorf und Peter Löhr 37

Literatur Sun Microsystems: Security http://java.sun.com/javase/6/docs/technotes/guides/security/ http://java.sun.com/javase/6/docs/technotes/guides/security/policyfiles.html http://java.sun.com/javase/6/docs/technotes/guides/security/permissions.html Sun Microsystems: Security Tutorial http://java.sun.com/docs/books/tutorial/security/ Robert Tolksdorf und Peter Löhr 38