Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [JAVA] problemi di sicurezza e scrittura su file

    Ciao a tutti!

    Sto provando a scrivere un applet in grado di scrivere su un file di testo:
    6 JLabel, 6 JTextField e due JButton.
    L'idea sarebbe che dopo aver immesso i dati nei JTextField si schiaccia uno dei due JButton e a seconda i dati vengono riportati all'interno di uno o dell'altro file .odt, non sembra difficile, ma al momento di provare il programma quando clicko un JButton nel terminalino di linux esce l'errore:
    codice:
    Exception in thread "AWT-EventQueue-1" java.security.AccessControlException: access denied (java.io.FilePermission /home/jekotojava/Documenti/prova.odt write)
    secondo voi è un errore nel codice? provo a postarlo:
    codice:
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    import javax.swing.*;
    import java.awt.*;
    import java.io.*;
    
    public class prova2 extends JApplet {
        private static final long serialVersionUID = 1L;
    
        JButton[] bottone;
        JPanel pannelloBottoni;
        JPanel pannelloCampi;
        Container pannelloApplet;
    
        public JTextField aCode = new JTextField(10);
        public JTextField aNome = new JTextField(10);
        public JTextField società = new JTextField(10);
        public JTextField venduti = new JTextField(10);
        public JTextField costo = new JTextField(10);
        public JTextField guadagno = new JTextField(10);
    
    //Labels
        public JLabel codice = new JLabel("Codice articolo:");
        public JLabel nome = new JLabel("Nome articolo:");
        public JLabel socProd = new JLabel("Società di produzione:");
        public JLabel v100 = new JLabel("Venduti/100:");
        public JLabel c100 = new JLabel("Costo di cento unità:");
        public JLabel g100 = new JLabel("Guadagno con 100 unità:");
    
        public void init() {
    
    //   Settaggio testo
    	aCode.setEditable(true);
    	aNome.setEditable(true);
    	società.setEditable(true);
    	venduti.setEditable(true);
    	costo.setEditable(true);
    	guadagno.setEditable(true);
    
    	// Definisco il layout dell'applet: 
    	pannelloApplet = getContentPane();
    	pannelloApplet.setLayout(new BorderLayout());
    
    	// inseriremo i 6 bottoni in un pannello che verra' inserito 
    	// nel centro dell'applet. Costruiamo il pannello: 
    
    	pannelloBottoni = new JPanel();
    
    	// dispongo i 2 bottoni in una griglia:
    	pannelloBottoni.setLayout(new FlowLayout());
    
    	// definisco un array di 2 bottoni.
    	bottone = new JButton[2];
    
    	// inizializzo i bottoni e li aggiungo al pannelloBottoni.
    	// Etichetta dei bottoni:
    	String[] nomeBottone = {"Salva come positivo", "Salva come negativo"};
    
    	// Colore di sfondo dei bottoni: 
    	Color[] coloreBottone = {Color.red, Color.cyan};
    
    	for (int i = 0; i < bottone.length; i++) {
    	    bottone[i] = new JButton(nomeBottone[i]);
    	    bottone[i].setBackground(coloreBottone[i]);
    	    pannelloBottoni.add(bottone[i]);}
    
    	// inserisco il pannelloBottoni a sud dell'applet: 
    	pannelloApplet.add(pannelloBottoni, BorderLayout.SOUTH);
    
    //	Definisco il pannello e i campi d'Input che dovrà contenere:
    	JPanel pannelloCampi = new JPanel();
    	pannelloCampi.setLayout(new GridLayout(6,2,0,0));
    
    //	Inserisco in pannelloCampi le labels e i campi d'input:
    	pannelloCampi.add(codice);
    	pannelloCampi.add(aCode);
    
    	pannelloCampi.add(nome);
    	pannelloCampi.add(aNome);
    
    	pannelloCampi.add(socProd);
    	pannelloCampi.add(società);
    
    	pannelloCampi.add(v100);
    	pannelloCampi.add(venduti);
    
    	pannelloCampi.add(c100);
    	pannelloCampi.add(costo);
    
    	pannelloCampi.add(g100);
    	pannelloCampi.add(guadagno);
    
    	// inserisco il pannelloCampi a nord dell'applet:
    	pannelloApplet.add(pannelloCampi, BorderLayout.NORTH);
    
    	//ActionListener(s) da implementare dopo questa classe
    	Receiver1 receiver1 = new Receiver1();
    	Receiver2 receiver2 = new Receiver2();
    
    	//		assegnazione ActionListener(s) ai corrispondenti JButton(s)	assegnazione ActionListener(s) ai corrispondenti JButton(s)
    	bottone[0].addActionListener(receiver1);
    	bottone[1].addActionListener(receiver2);
    	}
        class Receiver1 implements ActionListener {
    	public void actionPerformed(ActionEvent e) {
    
    	String codiceArticolo = aCode.getText ();
    	String nomeArticolo = aNome.getText ();
    	String societàProduzione = società.getText ();
    	String venduti100 = venduti.getText ();
    	String costo100 = costo.getText ();
    	String guadagno100 = guadagno.getText ();
    
    // Creo un file su cui scrivere, lo denomino per ora prova.odt
          try{
              FileOutputStream prova = new FileOutputStream("/home/jekotojava/Documenti/prova.odt");
              PrintStream scrivi = new PrintStream(prova);
    
    // Scrivo sul nuovo standard output:
    	scrivi.println("\n Positivi.\n");
    	scrivi.println("*P Codice dell'articolo: "+ codiceArticolo);
    	scrivi.println("*P Nome dell'articolo: "+ nomeArticolo);
    	scrivi.println("*P Società produttrice dell'articolo: "+ societàProduzione);
    	scrivi.println("*P Percentuale di articoli venduti al mese: "+ venduti100);
    	scrivi.println("*P Costo di 100 unità (€): "+ costo100);
    	scrivi.println("*P Guagagno con 100 unità vendute (€): "+ guadagno100);
    	scrivi.println("\n Articolo giudicato di guadagno.");
    
    	}catch (IOException ioe){
              System.out.println("Errore: " + ioe);
    			}
    		}
    	}
    
        class Receiver2 implements ActionListener {
    	public void actionPerformed(ActionEvent e) {
    
    	String codiceArticolo = aCode.getText ();
    	String nomeArticolo = aNome.getText ();
    	String societàProduzione = società.getText ();
    	String venduti100 = venduti.getText ();
    	String costo100 = costo.getText ();
    	String guadagno100 = guadagno.getText ();
    
    // Creo un file su cui scrivere, lo denomino per ora nonProva.odt
          try{
              FileOutputStream prova = new FileOutputStream("/home/jekotojava/Documenti/nonProva.odt");
              PrintStream scrivi = new PrintStream(prova);
    
    // Scrivo sul nuovo standard output:
    	scrivi.println("\n Negativi.\n");
    	scrivi.println("*P Codice dell'articolo: "+ codiceArticolo);
    	scrivi.println("*P Nome dell'articolo: "+ nomeArticolo);
    	scrivi.println("*P Società produttrice dell'articolo: "+ societàProduzione);
    	scrivi.println("*P Percentuale di articoli venduti al mese: "+ venduti100);
    	scrivi.println("*P Costo di 100 unità (€): "+ costo100);
    	scrivi.println("*P Guagagno con 100 unità vendute (€): "+ guadagno100);
    	scrivi.println("\n Articolo giudicato di non-guadagno.");
    
    	}catch (IOException ioe2){
              System.out.println("Errore: " + ioe2);
    			}
    		}
    	}
    }
    Gato

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] problemi di sicurezza e scrittura su file

    Originariamente inviato da fpertegato
    codice:
    Exception in thread "AWT-EventQueue-1" java.security.AccessControlException: access denied (java.io.FilePermission /home/jekotojava/Documenti/prova.odt write)
    secondo voi è un errore nel codice?
    No, una questione concettuale. Le applet se non sono "firmate" digitalmente o se non le vengono comunque dati i dovuti permessi (smanettando con le policy di sicurezza del JRE, cosa che l'utente "normale" tipicamente non fa, per chiarire), hanno delle pesanti restrizioni, tra cui il non poter fare nulla sul file-system locale.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Ah, ok..grazie! ..quindi secondo te cosa mi conviene fare? provo a fare la stessa cosa con un JFrame o provo a smanettare sulle policy?
    Gato

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da fpertegato
    provo a fare la stessa cosa con un JFrame
    Se intendi una applicazione "desktop" tradizionale (quella che ha come entry-point il classico main(String[] args), per intenderci) ovviamente non hai restrizioni. Non "gira" in una pagina web, la avvia esplicitamente l'utente.

    Originariamente inviato da fpertegato
    o provo a smanettare sulle policy?
    Per tue prove personali, sì potresti farlo (dovresti comunque leggere la documentazione sulla security).
    Ma l'utente "normale", non "smanettone" non saprebbe forse bene dove mettere le mani. Dipende per "chi è" questa cosa che stai sviluppando ...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    È per me, essendo ancora giovane di Java provo a fare qualcosa di nuovo (o almeno, che per me è nuovo, sicuramente saranno cose già fatte e rifatte da chi ci sa fare veramente)...quindi credo che proverò entrambe le strade che mi hai indicato!
    Sai dove posso trovare la documentazione di cui mi hai scritto?

    Grazie!
    Gato

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da fpertegato
    Sai dove posso trovare la documentazione di cui mi hai scritto?
    La security è documentata qui. Per le "policy" di sicurezza ti basta solo leggere le sezioni "Policy Permissions" e "Default Policy Implementation and Policy File Syntax".

    Per la firma digitale è meglio se cerchi un tutorial in italiano, su html.it mi pare ci sia qualcosa. Puoi anche firmate tu il certificato (self-signed) ma ricordati che vale meno di niente. Quindi va bene se la applet la usi tu o qualcuno che si fida della tua applet.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Grazie mille Andbin! Ora vado a leggermi tutto (compresa la firma digitale, tenendo conto di tutto!) e provo, grazie!!
    Gato

  8. #8
    A chi dovesse interessare, il tutorial in italiano di HTML.it è a questo indirizzo:

    http://java.html.it/articoli/leggi/1...are-un-applet/

    Ciao a tutti!
    Gato

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.