Applet bekommt keinen Datenbankzugriff

Status
Nicht offen für weitere Antworten.
T

Thomas123

Gast
Abend,

ich habe ein Applet (login.jar) welches auf eine MYSQL-Datenbank Zugriff haben soll. Sich daraus das Passwort für einen bestimmten Nutzer herausholt und dann die Eingabe mit dem Inhalt des dazugehörigen Datenbankeintrages vergleicht.
Wenn alles okay ist, wird auf eine "Welcome"-Seite umgeleitet in allen anderen Fällen (Drücken von Cancel und falsche Login-Daten) wird der Zugriff verweigert.

Das Applet ist signiert und funktioniert soweit auch. Aber irgendwie geht der Zugriff auf die Datenbank in die Hose.
Programmiert wurde der ganze Spass in Eclipse wo die Durchführung auch wunderbar funktioniert.
Nur im Browser (Firefox & IE) geht es leider nicht.

Ich vermute, dass das Applet trotz Signatur noch eingeschränkt ist. Warum auch immer. Ich habe in meinem Workspace von Eclipse noch eine java.policy.applet gefunden. Diese Datei ließ sich auch mit dem Policytool vom SDK öffnen. Muss ich diese Datei noch in dem JAR unterbringen? Wenn ja, wie? Oder nur auf den Server werfen und in meiner Manifestdatei nen Verweis darauf bringen?


Wäre nett, wenn mir Jemand nen Tipp geben könnte.


Grüße Thomas


PS: Installiert habe ich das J2SDK1.4.2_11!
 
T

Thomas123

Gast
So, da ich ja nun auch nicht untätig bin, habe ich die Fehlerquelle eventuell schon gefunden. Ich vermute, dass das Applet den JDBC-Treiber nicht finden kann.

Muss ich den Treiber nur in das Verzeichnis legen, wo auch die JAR ist oder muss der Treiber in die JAR eingebunden werden? Habe zwar beides schon versucht und noch keinen Erfolg gehabt, aber vielleicht mache ich ja auch was falsch....

nur bitte was?
 

SamHotte

Top Contributor
Ist 'ne Weile her, aber vom Prinzip her brauchst du für das Applet eine policy, die den Datenbankzugriff erlaubt. Ich hab den Code dafür irgendwo zu Hause rumfliegen und schaue gerne heute abend mal nach - war ein ziemliches Gefrickel damals.
 
T

Thomas123

Gast
Hey,

das wäre echt nett, wenn du da mal nachschauen würdest heute Abend. Danke schonmal fürs Posten.


Thomas
 

L-ectron-X

Gesperrter Benutzer
Eigentlich sollte es funktionieren, wenn du das Applet signierst, weil es sich ja zu einem anderen Server verbinden soll und nicht nur zu dem, von dem es heruntergeladen wurde.
 
J

Jörn

Gast
Hallo,

ich arbeite auch an dem Projekt von Thomas123:

Also das Applet und der Server auf welchem sich die Datenbank befindet sind gleich. Aber auch das signieren des Applets bringt nichts. Wir haben mittlerweile das Problem, dass wir unter Eclipse alles ausführen können, aber sobald wir die .class Dateien uploaden funktioniert nicht ein Applet oder Klasse.
 
T

Thomas123

Gast
Hey,

das signieren der Applets hat insoweit was gebracht, dass wir aus der "Sandbox" rausgekommen sind. Aber leider funktioniert der Datenbanktreiber nicht, bzw. er wird nicht geladen. Ich vermute, dass in der manifest-Datei noch nen Eintrag stehen muss, der auf den Ort des Datenbanktreibers verweist. Ich habe versucht mir selber eine Manifest.mf zu schreiben mit einem Class-Path, dass ganze in ein .jar-File gepackt. Jedoch beim Signieren wird die Manifest.mf neu geschrieben und alle meine Änderungen sind weg.

Grundprinzipiell funktioniert das Applet im signierten Zustand auch, nur wird der Datenbanktreiber nicht gefunden und meine Class-Datei, die die Abfrage zur Datenbank übernimmt, liefert nen "Null-Wert" zurück. Das konnte ich schon testen.

Wenn mir da noch jemand weiterhelfen könnte, wäre echt klasse.

Ich habe auch schon versucht, den JDBC-Treiber zu entpacken und wieder in die .jar zu packen, den JDBC-Treiber als .jar in mein Applet zu packen, bzw. den JDBC-Treiber einfach mit auf den Webspace... aber alles hat noch nichts gebracht...

Ich hoffe das ich heute noch die Lösung finden würde. Langsam sitzt mir/uns die Zeit im Nacken.


Gruß Thomas
 

SamHotte

Top Contributor
Leider hat meine Suche nicht wirklich geholfen - ich hatte damals das Applet mit einer "AllPermission" ausgestattet, da ich keine Zeit für weitere Dinge hatte - sorry.

Vllt. hilft es aber weiter: meine Anwendung war zweigeteilt in Server und Applet, die beiden haben sich per RMI unterhalten; der Server hat die Datenbankzugriffe gemacht und in seiner Policy einen Eintrag mit "java.io.FilePermission" drin - vielleicht benötigt man die für den Treiber?
 

SamHotte

Top Contributor
@L-ectron-X
War die Frage für mich? Ja, damals lief ein DB-Server (DB2) auf dem selben Rechner wie der "Applikationsserver", der den Server-Teil meiner Anwendung hostete.
 

L-ectron-X

Gesperrter Benutzer
Sorry Sam, die war nicht an dich gerichtet. Ist aber auch nicht schlimm. :wink:
Die Frage ging an den/die TO's. Bisher kam nicht zur Sprache, ob denn irgendwo ein DB-Server läuft, auf den das Applet zugreifen könnte.
 
T

Thomas123

Gast
Hey,

also, ich habe das Problem gelöst!

Folgendes wurde gemacht. Wir haben uns einen "neuen" SecurityManager geschrieben. Der wurde mit in mein Applet eingebunden.

Er sieht wie folgt aus:

SecurityMngr.java
Code:
import java.io.FileDescriptor;
import java.net.InetAddress;
import java.security.Permission;

/*
 * Created on 26.04.2006 by Andreas Wolff, Universität Rostock
 * as part of AppletTest
 */

public class SecurityMngr extends SecurityManager {

    /* (non-Javadoc)
     * @see java.lang.SecurityManager#checkAccept(java.lang.String, int)
     */
    public void checkAccept(String host, int port) {
        return;
    }

    /* (non-Javadoc)
     * @see java.lang.SecurityManager#checkAccess(java.lang.Thread)
     */
    public void checkAccess(Thread t) {
        return;    }

    /* (non-Javadoc)
     * @see java.lang.SecurityManager#checkAccess(java.lang.ThreadGroup)
     */
    public void checkAccess(ThreadGroup g) {
        return;
    }

    /* (non-Javadoc)
     * @see java.lang.SecurityManager#checkAwtEventQueueAccess()
     */
    public void checkAwtEventQueueAccess() {
        return;
    }

    /* (non-Javadoc)
     * @see java.lang.SecurityManager#checkConnect(java.lang.String, int, java.lang.Object)
     */
    public void checkConnect(String host, int port, Object context) {
        return;
    }

    /* (non-Javadoc)
     * @see java.lang.SecurityManager#checkConnect(java.lang.String, int)
     */
    public void checkConnect(String host, int port) {
        return;
    }

    /* (non-Javadoc)
     * @see java.lang.SecurityManager#checkCreateClassLoader()
     */
    public void checkCreateClassLoader() {
        return;
    }

    /* (non-Javadoc)
     * @see java.lang.SecurityManager#checkDelete(java.lang.String)
     */
    public void checkDelete(String file) {
        return;
    }

    /* (non-Javadoc)
     * @see java.lang.SecurityManager#checkExec(java.lang.String)
     */
    public void checkExec(String cmd) {
        return;
    }

    /* (non-Javadoc)
     * @see java.lang.SecurityManager#checkExit(int)
     */
    public void checkExit(int status) {
        return;
    }

    /* (non-Javadoc)
     * @see java.lang.SecurityManager#checkLink(java.lang.String)
     */
    public void checkLink(String lib) {
        return;
    }

    /* (non-Javadoc)
     * @see java.lang.SecurityManager#checkListen(int)
     */
    public void checkListen(int port) {
        return;
    }

    /* (non-Javadoc)
     * @see java.lang.SecurityManager#checkMemberAccess(java.lang.Class, int)
     */
    public void checkMemberAccess(Class clazz, int which) {
        return;
    }

    /* (non-Javadoc)
     * @see java.lang.SecurityManager#checkMulticast(java.net.InetAddress)
     */
    public void checkMulticast(InetAddress maddr) {
        return;
    }

    /* (non-Javadoc)
     * @see java.lang.SecurityManager#checkPackageAccess(java.lang.String)
     */
    public void checkPackageAccess(String pkg) {
        return;
    }

    /* (non-Javadoc)
     * @see java.lang.SecurityManager#checkPackageDefinition(java.lang.String)
     */
    public void checkPackageDefinition(String pkg) {
        return;
    }

    /* (non-Javadoc)
     * @see java.lang.SecurityManager#checkPermission(java.security.Permission, java.lang.Object)
     */
    public void checkPermission(Permission perm, Object context) {
        return;
    }

    /* (non-Javadoc)
     * @see java.lang.SecurityManager#checkPermission(java.security.Permission)
     */
    public void checkPermission(Permission perm) {
        return;
    }

    /* (non-Javadoc)
     * @see java.lang.SecurityManager#checkPrintJobAccess()
     */
    public void checkPrintJobAccess() {
        return;
    }

    /* (non-Javadoc)
     * @see java.lang.SecurityManager#checkPropertiesAccess()
     */
    public void checkPropertiesAccess() {
        return;
    }

    /* (non-Javadoc)
     * @see java.lang.SecurityManager#checkPropertyAccess(java.lang.String)
     */
    public void checkPropertyAccess(String key) {
        return;
    }

    /* (non-Javadoc)
     * @see java.lang.SecurityManager#checkRead(java.io.FileDescriptor)
     */
    public void checkRead(FileDescriptor fd) {
        return;
    }

    /* (non-Javadoc)
     * @see java.lang.SecurityManager#checkRead(java.lang.String, java.lang.Object)
     */
    public void checkRead(String file, Object context) {
        return;
    }

    /* (non-Javadoc)
     * @see java.lang.SecurityManager#checkRead(java.lang.String)
     */
    public void checkRead(String file) {
        return;
    }

    /* (non-Javadoc)
     * @see java.lang.SecurityManager#checkSecurityAccess(java.lang.String)
     */
    public void checkSecurityAccess(String target) {
        return;
    }

    /* (non-Javadoc)
     * @see java.lang.SecurityManager#checkSetFactory()
     */
    public void checkSetFactory() {
        return;
    }

    /* (non-Javadoc)
     * @see java.lang.SecurityManager#checkSystemClipboardAccess()
     */
    public void checkSystemClipboardAccess() {
        return;
    }

    /* (non-Javadoc)
     * @see java.lang.SecurityManager#checkTopLevelWindow(java.lang.Object)
     */
    public boolean checkTopLevelWindow(Object window) {
        return true;
    }

    /* (non-Javadoc)
     * @see java.lang.SecurityManager#checkWrite(java.io.FileDescriptor)
     */
    public void checkWrite(FileDescriptor fd) {
        return;
    }

    /* (non-Javadoc)
     * @see java.lang.SecurityManager#checkWrite(java.lang.String)
     */
    public void checkWrite(String file) {
        return;
    }

}

Sind zwar nen bischen viele Eigenschaften, aber da muss man sich dann raussuchen was man braucht.
Eingebunden wird der dann mit folgendem Befehl:

Code:
System.setSecurityManager(new SecurityMngr());

Und dann muss man noch einen Class-Path in die Manifest-Datei von der .jar noch den Class-Path auf den Treiber setzen. Zum Beispiel so:

Code:
Class-Path: mysql-connector-java-3.1.12-bin.jar

Tjoa, dann halt das Applet noch signieren, den Datenbanktreiber in den selben Ordner vom .jar packen und dann kann es losgehen.

;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Hilfe ! Mein Applet bekommt ein Access-Denied von MySQL Datenbankprogrammierung 7
D MySQL Applet MYSQL Abfragen Sicherheit Datenbankprogrammierung 2
S Applet stucks at SQL Connection (jTDS JDBC) Datenbankprogrammierung 15
D Oracle SQL Ergebnis anzeigen und Applet Fehlermeldung Datenbankprogrammierung 12
D Datenbank Applet Datenbankprogrammierung 4
I Java (J)Applet und und RMI (momentan eher RMI) Datenbankprogrammierung 6
S Datenbankabfrage mit Applet Datenbankprogrammierung 13
G Applet und MsAccess Datenbankprogrammierung 2
M Aus einem Applet eine Datenbankverbindung starten? Datenbankprogrammierung 26
S Problem mit JDBC und Applet Datenbankprogrammierung 3
T APPLET MYSQL JDBC zum 1001mal Datenbankprogrammierung 6
A Java-Applet -> MySQL Datenbank Datenbankprogrammierung 7
S Applet und Verbindung zur DB Datenbankprogrammierung 8
M Sicherheit bei Applet auf MySQL Datenbank Datenbankprogrammierung 4
A MySQL+Webserver --(Java-Applet)----> Client Datenbankprogrammierung 11
G Access Zugriff, DB auf Server, Applet Datenbankprogrammierung 4
A Datenbankzugriff per Applet - Problem beim Treiber laden Datenbankprogrammierung 6
P Datenbankabfrage MYSQL aus Applet heraus Datenbankprogrammierung 6
T Datenbankzugriff (Oracle) mit Applet via Internet? Datenbankprogrammierung 6
S Datenbankanbindung + HTML + Applet Datenbankprogrammierung 7
D Applet + MySQL Datenbankprogrammierung 9
L Problem DBVerbindung ausserhalb des Editors:z.B Applet,MSDOS Datenbankprogrammierung 4
M Mit Java Applet via HDBC auf MySQL DB zugreifen? Datenbankprogrammierung 2
S Datenbanktest ergibt graues Fenster bei Applet Datenbankprogrammierung 5
L Zugriff von Applet auf mysql-DB Datenbankprogrammierung 2
F Problem mit MySQL-Datenbank und Java-Applet Datenbankprogrammierung 2
D Wie bekommt man die JDBC connection zum laufen?(Eclipse) Datenbankprogrammierung 16
D JPA findet keinen PersistenceProvider (maven, eclipselink) Datenbankprogrammierung 17
C keinen Zugang zum Dantenbank Datenbankprogrammierung 2
C Keinen Zugrift auf Datenbank Datenbankprogrammierung 2
X MySQL Java hat keinen Zugriff auf MySQL Datenbankprogrammierung 9
flenst111 SQL-Statement Wie konfiguriert man JDBC-Connect.richtig, damit es bei riesigen Tabs keinen Speicherüberlauf gibt? Datenbankprogrammierung 1
S kann leider keinen fehler ausmachen. Datenbankprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben