AccessController checkPermission siempre arroja una excepción

¿Cómo verifica si la aplicación tiene permiso para leer o escribir en directorios específicos en el sistema de archivos? Estoy intentando esto:

try {
    AccessController.checkPermission(new FilePermission(files[i]
            .getAbsolutePath(), "read,write"));
}
catch (Exception e) {
    System.out.println(e.toString());
}

pero siempre lanza la excepción y salidas:

java.security.AccessControlException: access denied ("java.io.FilePermission" "C:\Dell" "read")
java.security.AccessControlException: access denied ("java.io.FilePermission" "C:\Documents and Settings" "read")
java.security.AccessControlException: access denied ("java.io.FilePermission" "C:\glut-3.7.6" "read")

¿Hay algo que me falta aquí?

preguntado el 31 de julio de 12 a las 12:07

2 Respuestas

Parece que AccessController siempre lanza una excepción cuando no tienes permiso. Puedes manejar esto atrapando SecurityException.

Mejor solución para comprobar el permiso de lectura/escritura con java.io.File.canRead(), java.io.File.canWrite() métodos.

Respondido 31 Jul 12, 12:07

Probé java.io.File.canRead() pero eso devuelve verdadero para cada directorio. - Jackson

En realidad, creo que esto podría funcionar si verifico canRead en un archivo dentro del directorio. - Jackson

Texto de la documentación:

 Determines whether the access request indicated by the
 specified permission should be allowed or denied, based on
 the security policy currently in effect, and the context in
 this object. The request is allowed only if every ProtectionDomain
 in the context implies the permission. Otherwise the request is
 denied.

Respondido 21 Abr '21, 09:04

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.