2012-10-30 10 views
5

Ho un codice che legge l'input dell'utente dalla console usando il codice sottostante.Autorizzazione per la lettura di System.in in java

Console console = System.console(); 
String input = console.readLine(); 

Tuttavia, questo codice dovrebbe essere eseguito in un env molto sicuro, in cui i permessi di ogni azione sono controllati attraverso un file di criteri.

Così ho fatto la mia prova del codice Java con file di criteri come

grant codeBase "file:/myjar.jar" { 
    permission java.security.AllPermission; 
}; 

non ho idea, quello che il permesso devo utilizzare per concedere l'autorizzazione per console.readLine().

risposta

3

Se stai usando System.console in una JVM con il SecurityManager abilitato, avrete bisogno dei seguenti RuntimePermissions:

permission java.lang.RuntimePermission "readFileDescriptor"; 
permission java.lang.RuntimePermission "writeFileDescriptor"; 

Perché?

I descrittori System.in e System.out file (0 e 1, con 2 rappresenta System.err) sono già aperti al JVM. Lo strumento SecurityManager verifica che si disponga dell'accesso in scrittura ai descrittori di file aperti tramite lo checkWrite(FileDescriptor fd) method e, analogamente, l'accesso in lettura tramite lo checkRead(FileDescriptor fd) method. Il RuntimePermission richiesto da questi metodi sono elencati in javadocs.

Mentre "writeFileDescriptor" può sembrare superfluo, è necessario per inizializzare l'oggetto Console (almeno nel runtime di Oracle Java 7).

+0

Grazie. Ha funzionato come un fascino. :) – Jijoy

Problemi correlati