applet i blad: java.security.Access

0

Witam, zrobilem applet ale gdy go uruchomiam i klikne ping to pojawia sie blad:
'java.security.AccessControlException: access denied <java.io.filePermision ><< ALL FILES>> execute>"
Jak to moge naprawic??

/**
 * @(#)Aplet.java
 *
 * Sample Applet application
 *
 * @kalvin 
 * @version 1.00 06/09/01
 */
import java.awt.*;
import java.applet.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
import java.net.*;
public class Aplet extends JApplet {
	Runtime rt = Runtime.getRuntime();
	//		Runtime rt = Runtime.getRuntime().exec("d:/windows/system32/cmd.exe");;

	String s;
	JTextField rozmiar=new JTextField(2);
	JTextField ilosc=new JTextField(4);
	JTextField ip=new JTextField(9);
	JTextArea wyswietlanie=new JTextArea(8,10);
	JLabel rozmiar_l=new JLabel("Rozmiar: ");
	JLabel ilosc_l=new JLabel("Ilosc: ");
	JLabel ip_l=new JLabel("Adres ip: ");
	JButton ping_b=new JButton("ping");
	int f=100;
	String pob_r;
	String pob_i;
	String d;
	String pob_ip;	
	public void init()
	{
	//	Container panel=getContentPane();
	//	JLabel ety=new JLabel("sasA");
	//	panel.add(ety);
		///////////////


		//setTitle("Sprawdzanie pingu");
		JPanel panel=new JPanel();
		panel.setLayout(null);
		panel.add(rozmiar_l);
		rozmiar_l.setBounds(10,10, 80,20);
		panel.add(rozmiar);
		rozmiar.setBounds(65,10,40,20);
		
		panel.add(ilosc_l);
		ilosc_l.setBounds(120,10, 60,20);
		panel.add(ilosc);
		ilosc.setBounds(155,10,40,20);
		
		panel.add(ping_b);
		ping_b.setBounds(340,10,80,20);
		
		ping_b.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent zdarzenie)
			{
				Object kod=zdarzenie.getSource();
				if(kod==ping_b)
				{
					pob_r=rozmiar.getText();
					pob_i=ilosc.getText();
					rozmiar.setEditable(false);
					ilosc.setEditable(false);
					pob_ip=ip.getText();
					//wyswietlanie.append("ping -n "+pob_i+ " -l " +pob_r+" "+s+ " \n");
					//wyswietlanie.append(pob_i+ " " +pob_r);
			
				try
				{
					Process p = rt.exec ("ping -n "+pob_i+ " -l " +pob_r+" "+pob_ip);
			        wyswietlanie.append("pingujemy \n");
			        InputStream is = p.getInputStream();
			        BufferedReader rd = new BufferedReader(new InputStreamReader(is));
			        String str;
			        while((str = rd.readLine())!=null)
			        {
			            wyswietlanie.append("ping:" + str+ "\n");
			        d+=str;
       				}
      			System.out.println(d);
         		try{


   FileOutputStream plik = new FileOutputStream("plik_zapis.txt");
   for(int i = 0; i < d.length(); i++){
   	plik.write((int)d.charAt(i));
   }
} catch(IOException ex){
   System.out.println("Błąd operacji na pliku: "+ex);
} 			
			        rd.close();
			        p.destroy();
			        wyswietlanie.append("done\n");
			        
         }catch ( Exception e )
    	    {
            System.out.println ( e );
     		   }
    
		
		
				}
		//	repaint();
			}
		});
		
		panel.add(ip);
		ip.setBounds(230,10,90,20);
		
			
		wyswietlanie.setLineWrap(true);
		JScrollPane przewijanie=new JScrollPane(wyswietlanie);
		panel.add(przewijanie);
		przewijanie.setBounds(15,40,400,180);
		setContentPane(panel);
	
	
	
	
	} 
	
		
		/////////////////////////////
	}

	


0

Podpisz aplet cyfrowo i dodaj odpowiednie uprawnienia

0

applety mają pewne ograniczenia, których nie jesteś w stanie zmienić nawet z poziomu kodu. To co radzi Ci Luuki pomoże tylko w przypadku dostępu do plików na dysku. Wtedy podpisany cyfrowo applet będzie mógł się odwoływać do systemu plików.

Natomiast jak chodzi o kontakt z siecią.....

Tutaj applety są o wiele bardziej restrykcjonowane. Applet w sieci może komunikowac się tylko z serwerem, z którego pochodzi. No chyba że przerobisz go tak żeby odpalał się nie z przeglądarki www tylko z przeglądarki appletów.

Pozdrawiam

0

czyli jesli dobrze rozumie zniemiajac adres ip na moj powino dzialac? bo nawet jak tak zmienie to nie dziala:/ a da sie jakos wyslac dane do pliku html na serwerze?

dzieki za zainteresowanie

0
jmail napisał(a)

Natomiast jak chodzi o kontakt z siecią.....

Tutaj applety są o wiele bardziej restrykcjonowane. Applet w sieci może komunikowac się tylko z serwerem, z którego pochodzi. No chyba że przerobisz go tak żeby odpalał się nie z przeglądarki www tylko z przeglądarki appletów.

Sory Jmail ale nie masz racji. Applet nie podpisany ma duże ograniczenia - to prawda. Ale podpisany z przydzielonymi uprawnieniami może wszystko. Szczegółowy opis zagadnień związanych z podpisywaniem można znaleźć tu: http://www.javasoft.pl/artykul.jsp?a=23

kalvin napisał(a)

czyli jesli dobrze rozumie zniemiajac adres ip na moj powino dzialac?

Nie musisz znać adresu serwera, na którym znajduje się applet. Metoda getCodeBase() zwróci Ci ten adres.

kalvin napisał(a)

da sie jakos wyslac dane do pliku html na serwerze?

Na serwerze lokalnym nawet bez podpisywania. Tutorial o czytaniu/pisaniu z URL: http://java.sun.com/docs/books/tutorial/networking/urls/index.html

0

ok dzieki wielkie za odpowiedzi:)
zabieram sie za czytanie...

0

noi i dupa niedziala mi:/ probowalem zrobic tak jak jest natej stronie //www.javasoft.pl/artykul.jsp?a=23
wystepuje bledy przy kompilacji:

com.ms.security.PolicyEngine.assertPermission(
             com.ms.security.PermissionID.SYSTEM);

czyli niemam tych pakietow:/

Probowalem jeszcze robic przyklad z ksiazki Java 2 techniki zawansowane, mam plik applets.policy

keystore "file:///home/mydir/certs.store", "JKS";

grant signedby "acmeroot"
{
   permission java.io.FilePermission "<<ALL FILES>>", "read";
};

i kod, tworze podpisanie pliku .jar otwieram w przegladarce pisze niebezpieczny plik gdy sie zgadzam to tylko szare tlo i "Applet Loadaed"(opera) lub "Aplet FileReadApplet notinited" co jest grane??

/**
   @version 1.10 2004-09-13
   @author Cay Horstmann
*/

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.swing.*;

/**
   Aplet ten może zostać uruchomiony poza "piaskownicą" 
   i czytać lokalne pliki, jeśli udzielimy mu odpowiedniego pozwolenia.
*/
public class FileReadApplet extends JApplet
{  
   public FileReadApplet()
   {  
      fileNameField = new JTextField(20);
      JPanel panel = new JPanel();
      panel.add(new JLabel("File name:"));
      panel.add(fileNameField);
      JButton openButton = new JButton("Open");
      panel.add(openButton);
      openButton.addActionListener(new
         ActionListener()
         {  
            public void actionPerformed(ActionEvent event)
            {  
               loadFile(fileNameField.getText());
            }
         });

      add(panel, "North");

      fileText = new JTextArea();

      add(new JScrollPane(fileText), "Center");
   }

   /**
      Ładuje zawartość pliku do obszaru tekstowego.
      @param filename nazwa pliku
   */
   public void loadFile(String filename)
   {  
      try
      {  
         fileText.setText("");
         Scanner in = new Scanner(new FileReader(filename));
         while (in.hasNextLine())
         fileText.append(in.nextLine() + "\n");
         in.close();
      }
      catch (IOException e)
      {  
         fileText.append(e + "\n");
      }
      catch (SecurityException e)
      {  
         fileText.append("I am sorry, but I cannot do that.\n");
         fileText.append(e + "\n");
      }
   }

   private JTextField fileNameField;
   private JTextArea fileText;
}

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