Avatar billede mercutio Nybegynder
15. august 2001 - 10:44 Der er 28 kommentarer og
3 løsninger

Hvorfor får jeg alle disse securety exceptions....

Jeg har lavet en japplet som skal gå ned i en database og lave en forespørgsel hvilken den så skal vise men der sker ikke andet end at jeg får alle disse exceptions i consollen. Hvad gør jeg forkert?



Exception occurred during event dispatching:

java.security.AccessControlException: access denied (java.lang.RuntimePermission accessClassInPackage.sun.jdbc.odbc)

    at java.security.AccessControlContext.checkPermission(Unknown Source)

    at java.security.AccessController.checkPermission(Unknown Source)

    at java.lang.SecurityManager.checkPermission(Unknown Source)

    at java.lang.SecurityManager.checkPackageAccess(Unknown Source)

    at sun.applet.AppletSecurity.checkPackageAccess(Unknown Source)

    at sun.applet.AppletClassLoader.loadClass(Unknown Source)

    at java.lang.ClassLoader.loadClass(Unknown Source)

    at java.lang.ClassLoader.loadClassInternal(Unknown Source)

    at java.lang.Class.forName0(Native Method)

    at java.lang.Class.forName(Unknown Source)

    at Communicator.<init>(Communicator.java:8)

    at ordbogapplet.jButton1ActionPerformed(ordbogapplet.java:63)

    at ordbogapplet.access$000(ordbogapplet.java:12)

    at ordbogapplet$1.actionPerformed(ordbogapplet.java:43)

    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)

    at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(Unknown Source)

    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)

    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)

    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)

    at java.awt.Component.processMouseEvent(Unknown Source)

    at java.awt.Component.processEvent(Unknown Source)

    at java.awt.Container.processEvent(Unknown Source)

    at java.awt.Component.dispatchEventImpl(Unknown Source)

    at java.awt.Container.dispatchEventImpl(Unknown Source)

    at java.awt.Component.dispatchEvent(Unknown Source)

    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)

    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)

    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)

    at java.awt.Container.dispatchEventImpl(Unknown Source)

    at java.awt.Component.dispatchEvent(Unknown Source)

    at java.awt.EventQueue.dispatchEvent(Unknown Source)

    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)

    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)

    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

    at java.awt.EventDispatchThread.run(Unknown Source)
Avatar billede disky Nybegynder
15. august 2001 - 10:46 #1
det er altså kun 1 exception :)

Din applet er ikke certificeret.
Avatar billede alexbp Nybegynder
15. august 2001 - 11:00 #2
Det er garanteret et policy-problem ....

Applet\'er er pr. def. meget begrænsede i deres rettigheder, for slet ikke at sige, de default ikke må en sk..

Prøv at gemme en \'.java.policy\' fil (txt-format) under enten \'C:\\jdk1.3.\\lib\\security\' eller under dit \\Documents and Settings\\<user> bibliotek med følgende indhold:

/* AUTOMATICALLY GENERATED ON Tue Aug 14 11:51:27 CEST 2001*/
/* DO NOT EDIT */

grant codeBase \"file:${java.home}/lib/ext/*\" {
  permission java.security.AllPermission;
  permission java.awt.AWTPermission \"accessEventQueue\";
  permission java.awt.AWTPermission \"showWindowWithoutWarningBanner\";
  permission java.util.PropertyPermission \"user.home\", \"read\";
  permission java.io.FilePermission \"${user.home}/text.txt\", \"read,write\";
  permission java.io.FilePermission \"${user.home}/*.gif\", \"read\";
};

grant {
  permission java.lang.RuntimePermission \"stopThread\";
  permission java.net.SocketPermission \"localhost:1024-\", \"listen\";
  permission java.util.PropertyPermission \"java.version\", \"read\";
  permission java.util.PropertyPermission \"java.vendor\", \"read\";
  permission java.util.PropertyPermission \"java.vendor.url\", \"read\";
  permission java.util.PropertyPermission \"java.class.version\", \"read\";
  permission java.util.PropertyPermission \"os.name\", \"read\";
  permission java.util.PropertyPermission \"os.version\", \"read\";
  permission java.util.PropertyPermission \"os.arch\", \"read\";
  permission java.util.PropertyPermission \"file.separator\", \"read\";
  permission java.util.PropertyPermission \"path.separator\", \"read\";
  permission java.util.PropertyPermission \"line.separator\", \"read\";
  permission java.util.PropertyPermission \"java.specification.version\", \"read\";
  permission java.util.PropertyPermission \"java.specification.vendor\", \"read\";
  permission java.util.PropertyPermission \"java.specification.name\", \"read\";
  permission java.util.PropertyPermission \"java.vm.specification.version\", \"read\";
  permission java.util.PropertyPermission \"java.vm.specification.vendor\", \"read\";
  permission java.util.PropertyPermission \"java.vm.specification.name\", \"read\";
  permission java.util.PropertyPermission \"java.vm.version\", \"read\";
  permission java.util.PropertyPermission \"java.vm.vendor\", \"read\";
  permission java.util.PropertyPermission \"java.vm.name\", \"read\";
};

grant codeBase \"http://localhost:8080/*\" {
  permission java.io.FilePermission \"<<ALL FILES>>\", \"read\";
  permission java.security.AllPermission;
};

grant codeBase \"http://localhost:8080/images/*\" {
  permission java.io.FilePermission \"<<ALL FILES>>\", \"read\";
};

Lad mig vide om det kører, og gerne nogle points ...

/Alex - \'alexbp@post.tele.dk
Avatar billede mercutio Nybegynder
15. august 2001 - 13:50 #3
hmmm du bliver vidst lige nød til at forklare lidt mere om det policy der. Hvad skal filen hedde jeg gemmer det i? Hvordan kan jeg selv lave en policy fil?
Avatar billede mercutio Nybegynder
15. august 2001 - 14:02 #4
Så har jeg fundet ud af hvordan jeg laver en policy fil men det spiller stadig ikke
Avatar billede disky Nybegynder
15. august 2001 - 14:04 #5
Du skal have et sikkerheds certifikat.

Ligger din database på samme server som din .class applet fil ?
Avatar billede mercutio Nybegynder
15. august 2001 - 14:08 #6
Det er en mysql database men jo den ligger på samme server bare på en anden port...
Avatar billede logical Nybegynder
16. august 2001 - 07:38 #7
Hvis det er en mysql database, skal du heller ikke bruge sun.jdbc.odbc pakken.

I linie 8 af din Communicator.java står der sikkert:
Class.forName(\"sun.jdbc.odbc.JdbcOdbcDriver\");

Men hvis det er mysql, skal du bruge:

org.gjt.mm.mysql.Driver

og så selvfølgelig have den i din classpath
Avatar billede mercutio Nybegynder
16. august 2001 - 09:59 #8
Iogical det har nu lykkedes mig at lave en forespørgsel i en mysql db bare uden en applet ved hjælp af sun.jdbc.odbc pakken men jeg kan da godt se fornuften i at det burde være en mysql driver der skal bruges. En kammerat har anbefalet mig at lave en servlet som appletten så henvender sig til og får den til at lave forespørgslen men kan det virkelig passe at man ikke kan få en applet til at gå ned i en database?
Avatar billede logical Nybegynder
16. august 2001 - 10:14 #9
Nej, men applets er mere restricted end en servlet, fordi en applet fungerer i et client miljø, mens en servlet kører på server miljøet. Jeg (som klient) vil ikke kunne lide at modtage en applet fra dig, som kan mange ting, mens jeg vil gerne kalde en servlet for at få et request.

Derfor er din kammerats ord faktisk en god ide i den sammenhæng. Ikke fordi appletten ikke kan komme til det, men du binder også appletten til den givne implementering (og localhost m.m.), mens noget retur fra en servlet kan skiftes efter behov.

Servlets kræver jo så en eller anden servlet engine, og det skal sættes op og vedligeholdes, så der er mere arbejde der, men at lave permissions til din applet giver de samme problemer, og brugere skal sige god for din security extension etc.

For at finde svaret vil jeg anbefale at du læser javas doc omkring security, og særlig om RuntimePolicies (Jeg har ikke tid idag til at finde dit præcise svar)
Avatar billede mercutio Nybegynder
16. august 2001 - 11:04 #10
Når du skriver jeg skal have org.gjt.mm.mysql.Driver
På mysqls hjemmeside kan jeg finde to drivere men ikke den du nævner her. (Føler sig lidt smådum)
Avatar billede disky Nybegynder
16. august 2001 - 11:09 #11
Avatar billede disky Nybegynder
16. august 2001 - 11:10 #12
Inde i den tar.gz fil ligger der en mysql_comp.jar lig den i din classpath.

Så spiller det
Avatar billede logical Nybegynder
16. august 2001 - 11:13 #13
Avatar billede mercutio Nybegynder
16. august 2001 - 11:19 #14
Min kode er nu.
try
        {    Class.forName(\"org.gjt.mm.mysql.Driver\");
        }
        catch(ClassNotFoundException cnfe)
        {    System.err.println(\"JDBC-ODBC driver kunne ikke findes\");
            System.exit(1);
        }
Men den skriver Jdbc.... kunne ikke findes. Selv om jeg har addet mm.mysql-2.0.4-bin.jar i min cpath
Avatar billede disky Nybegynder
16. august 2001 - 11:20 #15
prøv specifikt at nævne den jar fil i din classpath også selvom du har nævnt det directory den er i
Avatar billede mercutio Nybegynder
16. august 2001 - 11:40 #16
Det har jeg gjort jeg har prøvet alt. Har jeg skrevet noget forkert i min kode? CPATH = c:\\jdk1.3.1\\lib\\mm.mysql-2.0.4-bin.jar

Og koden er som ovenfor.... burde det ikke funge?
Avatar billede mercutio Nybegynder
16. august 2001 - 11:53 #17
Bare for sjov prøvede jeg at pakke hele jar filen ud så class filerne ligger omkring den klasse fil jeg har prøvet at køre så burde den jo kunne finde det den skal bruge. Men den siger stadig den ikke kan finde driveren.
Avatar billede disky Nybegynder
16. august 2001 - 12:00 #18
prøv at hent den driver jeg henviser til, den er lidt ældre men jeg ved den virker, da jeg selv bruger den :)
Avatar billede mercutio Nybegynder
16. august 2001 - 12:07 #19
Det har jeg prøvet disky men det virker heller ikke. Jeg har endda lige prøvet at lave et simpelt program der kører uden applet bare med den nye driver men den er kold. Den kan bare ikke finde den driver der.... Hvis jeg lige giver et link til mit kode vil du så lige kigge på det bare for at se om der er en åbenlys fejl?
Avatar billede disky Nybegynder
16. august 2001 - 12:10 #20
kan jeg godt
Avatar billede mercutio Nybegynder
16. august 2001 - 12:17 #21
Avatar billede disky Nybegynder
16. august 2001 - 12:21 #22
Byt din:
connect = DriverManager.getConnection(\"jdbc:odbc:\"+database);


und med:

connect = DriverManager.getConnection(\"jdbc:mysql://localhost/\"+database);

så skulle det måske virker.

nå nej, det har jo ikke rigtigt noget at gøre med at den ikke kan finde driveren, men prøv aligevel :)
Avatar billede disky Nybegynder
16. august 2001 - 12:23 #23
jeg har forresten smidt min mysql_comp.jar i lib skuffen under min jdk1.3.1 og i lib skuffen under min jsp server.

og classpath peger direkte på mysql_comp.jar filen under JDK1.3.1
Avatar billede mercutio Nybegynder
16. august 2001 - 12:30 #24
jeg har gjort nøjagtig det samme.
Avatar billede disky Nybegynder
16. august 2001 - 12:35 #25
meget underligt.

nu et dumt spørgsmål. og du har kopieret mysql_comp.jar ind det hvor classpath siger den skal være ?

det er ikke godt nok bare at flytte .zip filen.


Men jeg går ud fra at det ikke er årsagen
Avatar billede mercutio Nybegynder
16. august 2001 - 13:38 #26
Jeps det har jeg gjort rigtigt men jeg er kommet til at tænke på noget andet. Kan det være fordi min database kræver et password som jeg ikke har brugt i java programmet?
Avatar billede disky Nybegynder
16. august 2001 - 13:39 #27
hehe du siger noget

connect = DriverManager.getConnection(\"jdbc:mysql://localhost/\"+database,username,password);

prøv den

Avatar billede mercutio Nybegynder
16. august 2001 - 13:51 #28
Doh glemte lige at tænke. Det er ikke det der er problemet for jeg kan jo godt gøre nøjagtig det samme når bare det ikke er i en applet. Men mysql driveren kører stadig ikke jeg ved ikke lige helt hvorfor... det virker hvis jeg smider driveren ind i lib biblioteket på min tomcat server og kører den derfra men ellers ikke uanset hvad jeg skriver i min CLASSPATH
Avatar billede disky Nybegynder
16. august 2001 - 13:52 #29
mystisk, meget mystisk.

gad vide om en applet har en anden classpath ???

p.s. hvis du bruger tomcat, så lav det hellere som JSP det er mere sikkert :)
Avatar billede mercutio Nybegynder
16. august 2001 - 14:37 #30
hehe det skal bare være i en applet =)
Avatar billede disky Nybegynder
16. august 2001 - 14:38 #31
hvad hvis du smider mysql_comp.jar i samme skuffe som din applet ? og sørger for at codebase peger på den skuffe ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester