Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Cos'è la bolla dell'IA e perché se ne parla
Cos'è la bolla dell'IA e perché se ne parla
Si parla molto ultimamente di "bolla dell'intelligenza artificiale", ma non è sempre chiaro perché: l'IA è una tecnologia molto promettente e che ha già cambiato molte cose dentro e fuori le aziende, ma ci sono enormi aspettative che stanno gonfiando a dismisura i valori delle azioni e distorcendo il mercato. Il che, com'è facile intuire, può portare a una ripetizione della "bolla dotcom", e forse anche di quella dei mutui subprime. Vediamo perché
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 25-09-2010, 14:53   #1
crocelu
Junior Member
 
Iscritto dal: Sep 2010
Messaggi: 1
ClassLoader..ProtectionDomain file Policy

Ciao a tutti...Sto realizzando (ci sto sbattendo la testa) un metodo per il controllo dell accesso java basato sui Ruoli. Ora sono ancora alle fasi preliminari e ho incontrato dei problemi per i permessi.
Ho creato un classLoader MYClassLoader che carica una classe TestClass.class allla quale verra associata anche un dominio di protezione con il permesso di leggere un file

l eccezione sollevata è questa
Codice:
java.security.AccessControlException: access denied (java.io.FilePermission C:\l uca.txt 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.checkRead(Unknown Source) at java.io.FileInputStream.<init>(Unknown Source) at java.io.FileInputStream.<init>(Unknown Source) at TestClass.leggifile(TestClass.java:39) at Test.main(Test.java:27)
come dicevo riguarda il permesso di apertura in lettura del file.
Per completezza posto le classi dell applicazione

myclassLoader : questa classe estende il class loader e istanzia la classe TestClass con un dominio di protezione nel quale vi è (in teoria ) il permesso di aprire il file

Codice:
import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.AccessController;
import java.security.CodeSource;
import java.security.Permission;
import java.security.ProtectionDomain;
import java.security.SecureClassLoader;
import java.util.Hashtable;
import java.util.StringTokenizer ;

public class myClassLoader extends ClassLoader {
    private Hashtable classes = new Hashtable();
    protected String path ;
    protected String extension ;
    protected ProtectionDomain domain;
    protected URL url=null;

    
    public myClassLoader( String path, String extension) {
        this.path = path ;
        this.extension = extension ;
      
      }
    
    /* Carica il contenuto di un file .class */
    private byte getClassBytes(String className)[] {
        System.out.println("Lettura dati da file per la classe "+className);
        byte result[];
        try {
            result = loadClassBytes( className ) ;
            
            return result;
        } catch (Exception e) {
            return null;
        }
    }

    private byte[] loadClassBytes(String className) throws MalformedURLException {
		// System.out.println("Lettura dati da file per la classe " +
		// classname);
    	String name="C:\\Users\\db2admin\\workspace\\Base\\src\\"+path+ "\\" +className  + "." + extension;
    	File classfile= new File (name);
    	URL url=classfile.toURI().toURL();
    	System.out.println(url.toString());
    	System.out.println(name);
    	byte result[] = null;
		FileInputStream fi = null;
		try {
			fi = new FileInputStream(classfile);
			
			result = new byte[(int) classfile.length()];
			fi.read(result);
		} catch (Exception e) {
			result = null;
		} finally {
			try {
				fi.close();
			} catch (Exception ex) {
			}
		}
		return result;
	}

    /* Questa e' la versione chiamata */
    public Class loadClass(String className) throws ClassNotFoundException {
        return (loadClass(className, true));
    }

    /* Questa e' la versione completa */
    public synchronized Class loadClass(String className, boolean resolveIt)
        throws ClassNotFoundException {
        Class result;
        byte  classData[];

        System.out.println("Caricamento della classe : "+className);

        /* Prima si controlla la cache */
        result = (Class)classes.get(className);
        if (result != null) {
            System.out.println("Utilizzata la copia nella cache.");
            return result;
        }

        /* Prima si prova col primordial class loader */
        try {
            result = super.findSystemClass(className);
            System.out.println("Classe di sistema (CLASSPATH)");
            return result;
        } catch (ClassNotFoundException e) {
            System.out.println("Non e' una classe di sistema.");
            if ( className.startsWith( "java.") ) {
              System.out.println("Classe pericolosa : " + className ) ;
              System.out.println( "Caricamento abortito" ) ;
              throw new ClassNotFoundException();
            }
        }

        /* poi si prova a caricare la classe dal path specificato */
        classData = getClassBytes(className);
        if (classData == null) {
            throw new ClassNotFoundException();
        }
        
        this.domain=generadominio(className);
        /* viene eseguito il parsing, e costruito l'oggetto class  */
        result = defineClass(className,classData, 0, classData.length,this.domain);
        if (result == null) {
            throw new ClassFormatError();
        }

        if (resolveIt) {
            resolveClass(result);
        }

        /* Si aggiorna la cache */
        classes.put(className, result);
        System.out.println("Classe caricata : " +className);
        return result;
    }
   
	private ProtectionDomain generadominio(String classname){
		java.security.cert.Certificate[] c=null;
		CodeSource cs=new CodeSource (url, c);
    
    Permission p1 = new FilePermission("C:\\luca.txt", "read");
      
     
       //AccessController.checkPermission(p1);
       TestPermissionCollection p= new TestPermissionCollection();
		p.add(p1);
		ProtectionDomain d=new ProtectionDomain (cs , p);
		return d;}
}
la classe caricata TestClass che appunto prova , tra altre cose , prova ad aprire il file in questione generando la suddetta eccezione
Codice:
import java.sql.Statement;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.* ;

public class TestClass implements myInterface {
// viene caricata la classe Vector
Vector v = new Vector() ;
TestConnection c;
public java.sql.Connection con;
// Fa parte dell'interfaccia myInterface
public void start( String opt ) {
// Ancora non viene caricata la classe
Hashtable ht ;

System.out.println("TestClass "+ opt);
System.out.println( "Istanzio una hashtable" ) ;

// adesso viene caricata la classe Hashtable
ht = new Hashtable() ;

for (int i=0 ; i < 5; i++ )
v.addElement( new Integer( i ) );

// Non viene ricaricata la classe
ht = new Hashtable() ;

for( int i = 0 ; i < v.size() ; i++ ) {
Integer z = (Integer) v.elementAt(i) ;
System.out.println( i + ": " + z ) ;
}
}
public void leggifile() throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader (
new FileInputStream("C:\\luca.txt")));
String linea = br.readLine();
System.out.println(linea);
}
public void creaConnection () throws ClassNotFoundException, SQLException, InterruptedException
{
c =new TestConnection();
java.lang.Class.forName(c.Driver);
con = DriverManager.getConnection(c.URL,c.User,c.Passworld); 

System.out.println("Connesso al db");
Thread.sleep(100);
// SQL statements processing object
Statement stmt = con.createStatement();
String query = "SELECT nome FROM Prova.prova";
// submit the SQL query, get result set

ResultSet rs = stmt.executeQuery( query );
while ( rs.next() )
{
// get field values by field name
String nome = rs.getString("nome");

System.out.println("il nome "+nome);
}

con.close();

}
}
la classe Test che implementa un main e si occupa di istanziare un myclassloader che caricherà la class TestClass . L 'oggetto di tale classe lancerà diversi metodi tra i quali leggifile() che provoca appunto l ' eccezzione

Codice:
/*	Esempio di utilizzo di myClassLoader */
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FilePermission;
import java.io.IOException;
import java.io.InputStreamReader;


public class Test {
public static void main( String args[] ) throws IOException {

myClassLoader classLoader = new myClassLoader( "arch", "class" ) ;
Object o ;
String tst = "TestClass" ;
// String tst = "java.Virus" ;

System.out.println( "Utilizzo di myClassLoader." ) ;

if ( args.length != 0 )
tst = args[0] ;

try {
o = (classLoader.loadClass(tst)).newInstance() ;

((myInterface) o).start("niente") ;
((myInterface) o).leggifile();
((myInterface) o).creaConnection();
} catch (Exception e ) {
e.printStackTrace() ;
}

}
}
a queste classi si aggiungono delle altre come un collezione di permessi PermitionCollection e un interfaccia myinterface implementata appunto TestClass .

Il file di policy personale che viene caricato ha "per il momento" il seguente contento :

Codice:
grant {permission java.lang.RuntimePermission "createClassLoader";}; grant codeBase "file:/C:/Users/db2admin/workspace/Base/src/arch/TestClass.class " {permission java.io.FilePermission "C:\\luca.txt" , "read";};
e per finire vi posto anche il comando con il quale lancio l applicazione ...tanto per essere completi
Codice:
C:\Users\db2admin\workspace\Base\src>java -Djava.security.manager -Djava.securit
y.policy=mypolicy.policy Test
Utilizzo di myClassLoader.
Caricamento della classe : TestClass
Non e' una classe di sistema.
Lettura dati da file per la classe TestClass
file:/C:/Users/db2admin/workspace/Base/src/arch/TestClass.class
C:\Users\db2admin\workspace\Base\src\arch\TestClass.class
Caricamento della classe : myInterface
Classe di sistema (CLASSPATH)
Caricamento della classe : java.lang.Object
eccc...........sino all accezione !!

Spero fortemente che qualcuno mi aiuti....spero inoltre di essere stato chiaro ed aver rispettato i requisiti
ciaoooo
crocelu è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
FRITZ!Repeater 1700 estende la rete super-veloce Wi-Fi 7 FRITZ!Repeater 1700 estende la rete super-veloce...
Scoperto un nuovo esopianeta che orbita ...
Blue Origin NS-37: successo per la missi...
Potrebbe essere stata rilevata una super...
La cometa interstellare 3I/ATLAS è...
Xiaomi 17 Ultra: l'autonomia non sarà un...
Il processo produttivo a 2 nm di TSMC è ...
L'atteso aggiornamento dei driver della ...
The Elder Scrolls VI nel 2029 e Fallout ...
Il Ryzen 7 9850X3D appare nel catalogo d...
Weekend pre natalizio Amazon, ecco tutte...
Prezzi giù su Oral-B iO: spazzolini elet...
19.000 Pa a un prezzo senza precedenti: ...
Narwal in super offerta su Amazon: robot...
SK hynix e NVIDIA lavorano a un SSD spec...
Roborock in super offerta su Amazon: pre...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 21:11.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v