nie dziala URL w aplet java?

0

Witam, mam taki oto kod

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import java.net.*;
import java.io.*;
import java.applet.*;

/**
 *
 * @author matx132
 */
public class PuzzleAplet extends Applet {

    /**
     * Initialization method that will be called after the applet is loaded
     * into the browser.
     */

 public void init() {
    try {

            URL y;
           InputStream is = null;
      DataInputStream dis;
      String s;

            y = new URL(getParameter("link"));
            is = y.openStream();
            dis = new DataInputStream(new BufferedInputStream(is));
String text = "";
while ((s = dis.readUTF()) != null) {
            text+=s;
         }

            try {
                getAppletContext().showDocument(new URL("javascript:doAlert(\"" + text + "\")"));
            } catch (MalformedURLException me) {
            }
      }
        catch (IOException ex) {
        }

 }

}

po wejściu na stronę www w console java jest takie coś:

java.security.AccessControlException: access denied (java.net.SocketPermission www.google.pl:80 connect,resolve)
    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.checkConnect(Unknown Source)
    at sun.plugin2.applet.Applet2SecurityManager.checkConnect(Unknown Source)
    at sun.net.www.http.HttpClient.openServer(Unknown Source)
    at sun.net.www.http.HttpClient.<init>(Unknown Source)
    at sun.net.www.http.HttpClient.New(Unknown Source)
    at sun.net.www.http.HttpClient.New(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
    at java.net.URL.openStream(Unknown Source)
    at PuzzleAplet.init(PuzzleAplet.java:34)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Exception: java.security.AccessControlException: access denied (java.net.SocketPermission www.google.pl:80 connect,resolve)

Piszę aplikacje która będzie pobierać kod źródłowy danej strony (muszę zrobić to w java).

Prosiłbym o pomoc z tym bo nie wiem dlaczego tak jest :/

0

Bo to applet. Applety domyślnie nie mają prawa do łączenia się ze adresami spod innej domeny (gdyż mogłyby się pod ciebie podszywać w różnych serwisach bez twojej wiedzy), nie mogą grzebać w plikach na dysku itp.
Jeśli chcesz takie funkcjonalności, musisz aplet podpisać, wtedy użytkownik będzie musiał wyrazić zgodę na odpalenie appletu z dostępem.

0
Keraj napisał(a)

Bo to applet. Applety domyślnie nie mają prawa do łączenia się ze adresami spod innej domeny (gdyż mogłyby się pod ciebie podszywać w różnych serwisach bez twojej wiedzy), nie mogą grzebać w plikach na dysku itp.
Jeśli chcesz takie funkcjonalności, musisz aplet podpisać, wtedy użytkownik będzie musiał wyrazić zgodę na odpalenie appletu z dostępem.

A czy mógłbym dowiedzieć się jak podpisać aplet? gdyż jestem nowy w tych zagadnieniach (JAVA)

0

Tak w skrócie:
w jdk1.x.x_xx\bin\ masz program keytool (.exe pod windows)
żeby móc go używać pod windowsem wszędzie, będziesz musiał dodać jdk/bin do zmiennej środowiskowej path albo po prostu zrób sobie bata z bezpośrednimi ścieżkami do tych exeków...

tworzysz stwój keystore
keytool -genkey -keystore plik.ks -alias jakis_alias
będziesz musiał podać swoje dane i wymyślić jakieś hasło.
wygenerowany plik.ks zachowaj, nie usuwaj.

Co mniej więcej pół roku (teraz od razu po jego wygenerowaniu też) będziesz go musiał potraktować takim poleceniem:
keytool -selfcert -keystore plik.ks -alias jakis_alias
jakis_alias - oczywiscie taki sam jak przy tworzeniu

gdy stworzysz plik jar i chcesz go podpisać, korzystasz z drugiego toola, jarsigner:, w ten sposób:
jarsigner -keystore plik.ks plik.jar jakis_alias

0

Dziękuje bardzo teraz wszystko działa

0

Tak zaiste w ten sposób się podpisuje applety ale...przecież używamy skomplikowanych IDE, które same w sobie ładnie i szybko nam to zrobią. W netbeans nazywa się to "self signed" i służy do "zamykania" jara. Dostaniemy się do tego klikajać prawym przyciskiem myszy na swoim projekcie dajemy properities a potem application-webstart. Zaznaczamy Enable web start oraz alow offline i własnie "self signed". Na dole w przypadku apletu dajemy applet descriptor i wybieramy klasę główną i koniec. Zachowujemy i teraz przy każdym kompilowaniu uzyskamy podpisanego jara.

0

Temat sprzed 4 miesięcy, ale mam identyczny problem.

Robię tak jak wyżej napisano w Netbeans i nie działa :(.
Dostaje identyczny błąd w firebugu:

uncaught exception: java.security.AccessControlException: access denied (java.net.SocketPermission o2.pl:80 connect,resolve)

0

Ile dni wg Ciebie trwa miesiąc?
Podpisz aplet.

0

Ile dni wg Ciebie trwa miesiąc?
Podpisz aplet.

Podpisałem dzisiaj, nie działa o.O. W ogóle nie rozumiem co masz na myśli pytając ile trwa miesiąc.

Źle popatrzyłem na daty (10-08, 04-08 [...]).

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0