Signieren: Mit JavaApplet auf die Festplatte schreiben

Um einem JavaApplet erweiterte Rechte einzuräumen, die es besipielsweise ermöglichen auf die lokale Festplatte zu schreiben, muss das Applet signiert werden.

Folgendes Batch-Script, das ich in einem Forum gefunden habe, beschreibt gut die notwendigen Schritte, und automatisiert diese bei Bedarf gleich. Eine an das aktuelle Projekt angepasste Version des Scripts im Arbeitsverzeichnis ist ein große Erleichterung beim Entwickeln, da das Signieren nach jeder Codeänderung neu durchgeführt werden muss:

@echo off
rem * Ablauf beim Signieren
rem *
rem * Erzeugen eines eigenen Schlüssels
rem * Mit KeyTool, einem Werkzeug aus dem SDK, einen neuen Schlüssel erzeugen:
rem * keytool -genkey -alias Signer -dname “cn=Dein Name, c=de”
rem * Gib anschließend Dein Passwort ein.
rem
rem * Erzeugen eines Zertifikats
rem * Mit KeyTool Zertifikat erzeugen:
rem * keytool -selfcert -alias Signer -dname “cn=Dein Name, c=de”
rem * Gib anschließend dein Passwort ein.
rem *
rem * Signieren des Applets
rem * Signieren des Applets mit Hilfe des Tools jarsigner
rem * jarsigner signed.jar Signer
rem * Und noch einmal dein Passwort eingeben.

echo = jarsign-Batch-Tool =
echo Dieses Tool hilft beim Erzeugen von signierten jar-Dateien
echo.
echo Schritt 1: jar-Dateien erzeugen
echo ——————————-

rem Pfad zum SDK setzen
rem –> anpassen!
set path=.;C:\Programme\Java\jdk1.5.0\bin

echo Manifestdatei erzeugen…
echo Manifest-Version: 1.0>manifest.mf
echo Created-by: jarsign-Batch-Tool>>manifest.mf

if exist *.jar goto key
echo jar-Datei mit angegebenen Parametern erzeugen…
rem –> anpassen!
rem * In diesem Beispiel werden alle .class-Dateien und die Verzeichnisse bilder und etc
rem * mit ins jar-Archiv gepackt.
jar cfvm MeinJar.jar manifest.mf *.class bilder etc

:key
echo.
echo Schritt 2: Schluessel generieren
echo ——————————–
rem –> anpassen!
keytool -genkey -alias Signer -dname “cn=Dein Name, c=de”

echo.
echo Schritt 3: Zertifikat erzeugen
echo ——————————
rem –> anpassen!
keytool -selfcert -alias Signer -dname “cn=Dein Name, c=de”

if not exist *.jar goto error
echo.
echo Schritt 4: jar-Datei signieren
echo ——————————
echo jarsigner erwartet hier nochmals dein Passwort.
rem –> anpassen!
jarsigner MeinJar.jar Signer

echo.
echo Schritt 5: Zertifikat testen
echo —————————-
rem –> anpassen!
jarsigner -verify -verbose -certs MeinJar.jar
goto end

:error
echo.
echo Es wurde keine jar-Datei zum Signieren gefunden.
echo Die Erzeugung der jar-Datei ist moeglicherweise fehlgeschlagen.
echo Pruefe deine Eingaben in der Batchdatei!

:end
if not exist manifest.mf goto console
echo.
rem Manifest von Festplatte löschen
del manifest.mf

:console
rem Console für Ausgaben noch geöffnet lassen
echo.
pause 

ImageButton in JavaApplet unter Verwendung von AWT

Um einwn Button unter Verwendung von AWT mit einem Icon zu versehen, braucht man nur dessen paint Methode zu überschreiben:

import java.awt.*;

public class ImageButton extends Button
{
	Image image ;
	public ImageButton( String s, Image img )
	{
		super( s ) ;
		image = img ;
		setBackground( Color.white ) ;
		setForeground( Color.white ) ;
	}

	public void paint( Graphics g )
	{
		g.drawImage( image,1,1,this ) ;
	}
}

anschließend kann er in einem Apllet wie folgt mit einem Icon versehen und wie ein gewöhnlicher Button verwendet werden:

import java.applet.Applet;

public class MyApplet extends Applet implements ActionListener
{
	ImageButton save_button;

	public void init()
	{
		Toolkit tk = getToolkit() ;
		try
		{
			save_button = new ImageButton(”S” , tk.getImage(new URL(getCodeBase(),”icons/save.gif”))) ;
		}
		catch (MalformedURLException e)
		{
			e.printStackTrace();
		}

		this.add(save_button, null);
		save_button.addActionListener(this);
	}

	public void paint(Graphics g) {
	}

	public void actionPerformed(ActionEvent evt)
	{
		if (evt.getSource() == save_button)
		{
			/* TODO */
		}
	}
}