Avatar billede clscableguy Praktikant
18. november 2004 - 22:01 Der er 22 kommentarer og
1 løsning

access denied (java.util.PropertyPermission user.home read)

java.security.AccessControlException: access denied (java.util.PropertyPermission user.home read)

    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.checkPropertyAccess(Unknown Source)

    at java.lang.System.getProperty(Unknown Source)

    at KeyReader.init(keyreader.java:14)

    at sun.applet.AppletPanel.run(Unknown Source)

    at java.lang.Thread.run(Unknown Source)

Jeg får denne fejl nå jeg kører min signed applet.

Hvad skal jeg gøre for at den ikke gør det mere?

Kode:

import java.awt.*;
import javax.swing.*;
import java.io.*;
import java.net.*;

public class KeyReader extends JApplet {
String s;
    public void init() {
       
        try {
            String separator = System.getProperty("file.separator");
            String serfil = getParameter("serfil");

        FileReader fil = new FileReader(System.getProperty("user.home") + File.separator + serfil);
            System.out.println(System.getProperty("user.home") + File.separator + serfil);
            s = "";


            BufferedReader ind = new BufferedReader(fil);

        String linje = ind.readLine();
            while (linje != null)
              {
              s = s + linje;
              linje = ind.readLine();
              }


    try {
            String hyperlink = getParameter("hyperlink");           
            URL url = new URL(hyperlink + "?key=" + s);
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setRequestMethod("POST");
            String info = "key=" + s;
            con.setDoOutput(true);
            con.getOutputStream().write(info.getBytes());
            con.connect();
            getAppletContext().showDocument(url);
            if (con.getResponseCode() != HttpURLConnection.HTTP_OK) {
                System.err.println("POST failed");
            }
            con.disconnect();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
           
                   
           
        }
        catch (IOException e) {
            if (e.getMessage() != null)
                System.out.println("e=" + e);
        }


    }

}
Avatar billede arne_v Ekspert
18. november 2004 - 22:03 #1
Applet security tillader tilsyneladende ikke applets at hente user.home ...
Avatar billede clscableguy Praktikant
18. november 2004 - 22:04 #2
nej, men hvordan kan jeg komme til det, hvis man kan?
Avatar billede arne_v Ekspert
18. november 2004 - 22:07 #3
Det sædvanelige applet bøvl.

Muligheder:
  * du kan ændre din kode så du ikke bruger den property
  * du kan få alle clients til at give alle adgang til den property
  * du kan putte din applet i en jar, signe den og få alle clients
    til at give kun din kode adgang til den property
Avatar billede clscableguy Praktikant
18. november 2004 - 22:09 #4
mulighed nr. 3 : du kan putte din applet i en jar, signe den og få alle clients til at give kun din kode adgang til den property

Hvordan ville kode se ud til ovennævte mulighed?

Forresten så mange tak for hurtigt svar.    :)
Avatar billede arne_v Ekspert
18. november 2004 - 22:18 #5
Java koden skal ikke ændres.

Den compilede class fil skal pakkes i en jar fil.

Den jar fil skal signes.

HTML filen skal rettes til at referere til jar filen.
Avatar billede arne_v Ekspert
18. november 2004 - 22:20 #6
Jeg har ikke testet indholdet af den her artikel, men det lyder overbevisende:

http://personal.vsnl.com/sureshms/javasign1.html
Avatar billede clscableguy Praktikant
18. november 2004 - 22:22 #7
vil det sige at min html kode skal se sådan her ud:

<html>
<body>
<center>
<applet code="KeyReader.jar" archive="KeyReader.jar" width=325 height=325>
<param name="serfil" value="fil.ser">
<param name="hyperlink" value="http://www.google.dk">
</applet>
</center>
</body>
</html>
Avatar billede clscableguy Praktikant
18. november 2004 - 22:23 #8
jeg compiler nemlig min fil så her:

javac keyreader.java
jar cvf keyreader.jar keyreader.class
jarsigner keyreader.jar keyreader
Avatar billede arne_v Ekspert
18. november 2004 - 22:25 #9
Avatar billede arne_v Ekspert
18. november 2004 - 22:26 #10
Jeg mener at det skal være:

<applet code="KeyReader.class" archive="KeyReader.jar" width=325 height=325>
Avatar billede clscableguy Praktikant
18. november 2004 - 22:32 #11
nu er jeg ikke helt med.

Skal jeg lave en fil som hedder all.policy og ser sådan her ud:

grant {
  permission java.io.FilePermission "<<ALL FILES>>", "write";
};

og så skal jeg compiler min fil på denne her måde:

javac keyreader.java
jar cvf keyreader.jar keyreader.class
jarsigner keyreader.jar keyreader
java -Djava.security.manager -Djava.security.policy=all.policy keyreader

er det rigtigt forstået?
Avatar billede arne_v Ekspert
18. november 2004 - 22:34 #12
Nej.

Det er noget som man kan med applications.

For applets skal man rette i den policy fil som browserens java
plugin bruger.
Avatar billede clscableguy Praktikant
18. november 2004 - 22:40 #13
okay, vil det sige at det er noget man skal have ændret på klientens maskine.

Hvis ja, hvordan kommer jeg så ud over mit problem med hvor filen ligger, for mit problem er at jeg ikke vide hvor filen ligger på klientens maskine da de jo kan køre mac, windows, linux o.s.v
Avatar billede arne_v Ekspert
18. november 2004 - 22:42 #14
Du kan ikke ændre det.

Brugerne skal selv ændre det.

Af indlysende årsager.
Avatar billede arne_v Ekspert
18. november 2004 - 22:42 #15
Det er så forbandet besværligt.

Men det ville jo ikke være smart hvis en web side via en applet kunne
trashe en client maskine totalt.
Avatar billede clscableguy Praktikant
18. november 2004 - 22:46 #16
Ja det kan jeg godt se nu du siger det.

Kan man så lave det på den måde at i min applet at hvis det er en windows maskine så gemmer jeg i c:\ og hvis det er andet så skal de i den grafisk delen af min applet selv browse sig frem til filen. Eller kan man ikke lave en browse funktion i en applet?
Avatar billede arne_v Ekspert
18. november 2004 - 22:57 #17
Du kan godt hardcode stien. Men en applet har heller ikke adgang til
fil systemet hverken læsning eller skrivning (med default applet privs).

Hvis du vil gemme noget for en bruger så skal det gemmes server side.
Avatar billede clscableguy Praktikant
18. november 2004 - 23:04 #18
Jeg har en applet som er signes og den kan godt læse filen på c:\filen.ser og jeg får indhold sendt vidre til min anden side.
Avatar billede arne_v Ekspert
18. november 2004 - 23:42 #19
Forhåbentligt har du rettet i policy filen. Ellers ville hvem som helst jo kunne
hapse indholdet af dine filer.
Avatar billede clscableguy Praktikant
18. november 2004 - 23:52 #20
nej, jeg har ikke rettet i policy filen. Jeg skal dog klikke på Yes hver gang min applet køres for at den kan gør det.
Avatar billede clscableguy Praktikant
18. november 2004 - 23:53 #21
men nu har jeg problemet, efter jeg har kørt java -Djava.security.manager -Djava.security.policy=all.policy keyreader så kan den ikke gøre det mere hvordan kan man slette det igen?
Avatar billede clscableguy Praktikant
17. oktober 2005 - 09:14 #22
læg et svar og du får point  :)
Avatar billede arne_v Ekspert
17. oktober 2005 - 09:19 #23
ok
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