java.lang.Objectjava.security.Permissionjava.io.FilePermission

Todas las interfaces implementadas:
Serializable, Guard
public final class FilePermission
extends Permission
implements Serializable

Esta clase representa el acceso a un archivo o directorio. Un FilePermission consta de un nombre de ruta y un conjunto de acciones válidas para ese nombre de ruta.

Nombre de ruta es el nombre de ruta del archivo o directorio al que se le otorgan las acciones especificadas. Un nombre de ruta que termina en “/ *” (donde “/” es el carácter separador de archivos, File.separatorChar) indica todos los archivos y directorios contenidos en ese directorio. Un nombre de ruta que termina con “/ -” indica (recursivamente) todos los archivos y subdirectorios contenidos en ese directorio. Este nombre de ruta se denomina nombre de ruta comodín. De lo contrario, es un nombre de ruta simple.

Un nombre de ruta que consta del token especial “> “partidos alguna expediente.

Nota: Un nombre de ruta que consta de un solo “*” indica todos los archivos en el directorio actual, mientras que un nombre de ruta que consta de un solo “-” indica todos los archivos en el directorio actual y (recursivamente) todos los archivos y subdirectorios contenidos en el directorio actual. directorio.

Las acciones que se otorgan se pasan al constructor en una cadena que contiene una lista de una o más palabras clave separadas por comas. Las posibles palabras clave son “leer”, “escribir”, “ejecutar”, “eliminar” y “leer enlace”. Su significado se define de la siguiente manera:

leer
permiso de lectura
escribir
permiso de escritura
ejecutar
ejecutar permiso. Permite Runtime.exec ser llamado. Corresponde a SecurityManager.checkExec.
Eliminar
eliminar el permiso. Permite File.delete ser llamado. Corresponde a SecurityManager.checkDelete.
readlink
leer permiso de enlace. Permite que se lea el destino de un enlace simbólico invocando el readSymbolicLink método.

La cadena de acciones se convierte a minúsculas antes del procesamiento.

Tenga cuidado al conceder FilePermissions. Piense en las implicaciones de otorgar acceso de lectura y especialmente de escritura a varios archivos y directorios. Los “> “El permiso con acción de escritura es especialmente peligroso. Esto otorga permiso para escribir en todo el sistema de archivos. Una cosa que esto permite efectivamente es el reemplazo del binario del sistema, incluido el entorno de ejecución de JVM.

Tenga en cuenta: el código siempre puede leer un archivo del mismo directorio en el que se encuentra (o un subdirectorio de ese directorio); no necesita un permiso explícito para hacerlo.

Ya que:
1.2
Ver también:
Permission, Permissions, PermissionCollection

Resumen del constructor

Constructores
Constructor Descripción
FilePermission​(String path,
String actions)
Crea un nuevo objeto FilePermission con las acciones especificadas.

Resumen del método

Modificador y tipo Método Descripción
boolean equals​(Object obj) Comprueba la igualdad de dos objetos FilePermission.
String getActions() Devuelve la “representación de cadena canónica” de las acciones.
int hashCode() Devuelve el valor del código hash para este objeto.
boolean implies​(Permission p) Comprueba si este objeto FilePermission “implica” el permiso especificado.
PermissionCollection newPermissionCollection() Devuelve un nuevo objeto PermissionCollection para almacenar objetos FilePermission.

Métodos declarados en la clase java.security.Permission

checkGuard, getName, toString

Métodos declarados en la clase java.lang.Object

clone, finalize, getClass, notify, notifyAll, wait, wait, wait

Detalles del constructor

publicFilePermission(String path,String actions)

Crea un nuevo objeto FilePermission con las acciones especificadas. sendero es el nombre de la ruta de un archivo o directorio, y comportamiento contiene una lista separada por comas de las acciones deseadas otorgadas en el archivo o directorio. Las posibles acciones son “leer”, “escribir”, “ejecutar”, “eliminar” y “leer enlace”.

Un nombre de ruta que termina en “/ *” (donde “/” es el carácter separador de archivos, File.separatorChar) indica todos los archivos y directorios contenidos en ese directorio. Un nombre de ruta que termina con “/ -” indica (recursivamente) todos los archivos y subdirectorios contenidos en ese directorio. El nombre de ruta especial “> “coincide con cualquier archivo.

Un nombre de ruta que consta de un solo “*” indica todos los archivos en el directorio actual, mientras que un nombre de ruta que consta de un solo “-” indica todos los archivos en el directorio actual y (recursivamente) todos los archivos y subdirectorios contenidos en el directorio actual.

Un nombre de ruta que contiene una cadena vacía representa una ruta vacía.

Nota de implementación:
En esta implementación, el jdk.io.permissionsUseCanonicalPath La propiedad del sistema dicta cómo path El argumento se procesa y almacena.

Si el valor de la propiedad del sistema se establece en true, path se canonicaliza y almacena como un objeto String llamado cpath. Esto significa que una ruta relativa se convierte en una ruta absoluta, una ruta 8.3 estilo DOS de Windows se expande a una ruta larga y un enlace simbólico se resuelve a su destino, etc.

Si el valor de la propiedad del sistema se establece en false, path se convierte en un Path objeto nombrado npath después normalization. No se realiza ninguna canonicalización, lo que significa que no se accede al sistema de archivos subyacente. Si una InvalidPathException se lanza durante la conversión, este FilePermission se etiquetará como no válido.

En cualquier caso, el carácter “*” o “-” al final de un comodín path se elimina antes de la canonicalización o normalización. Se almacena en un campo de bandera comodín separado.

El valor predeterminado de la jdk.io.permissionsUseCanonicalPath la propiedad del sistema es false en esta implementación.

El valor también se puede establecer con una propiedad de seguridad con el mismo nombre, pero establecer una propiedad del sistema anulará el valor de la propiedad de seguridad.

Parámetros:
path – el nombre de la ruta del archivo / directorio.
actions – la cadena de acción.
Lanza:
IllegalArgumentException – si las acciones son null, vacío, mal formado o contiene una acción diferente a las posibles acciones especificadas

Detalles del método

implica

publicboolean implies​(Permission p)

Comprueba si este objeto FilePermission “implica” el permiso especificado.

Más específicamente, este método devuelve verdadero si:

  • pag es una instancia de FilePermission,
  • pagLas acciones son un subconjunto adecuado de las acciones de este objeto, y
  • pagEl nombre de la ruta está implícito en el nombre de la ruta de este objeto. Por ejemplo, “/ tmp / *” implica “/ tmp / foo”, ya que “/ tmp / *” abarca todos los archivos del directorio “/ tmp”, incluido el denominado “foo”.

Precisamente, un nombre de ruta simple implica otro nombre de ruta simple si y solo si son iguales. Un nombre de ruta simple nunca implica un nombre de ruta comodín. Un nombre de ruta comodín implica otro nombre de ruta comodín si y solo si todos los nombres de ruta simples implícitos en el último están implícitos en el primero. Un nombre de ruta comodín implica un nombre de ruta simple si y solo si

  • si la bandera comodín es “*”, la ruta del nombre de ruta simple debe estar dentro de la ruta del nombre de ruta comodín.
  • si la bandera comodín es “-“, la ruta del nombre de ruta simple debe estar recursivamente dentro de la ruta del nombre de ruta comodín.

> “implica cualquier otro nombre de ruta. Sin nombre de ruta, excepto”> “en sí mismo, implica”> “.

Especificado por:
implies en la clase Permission
Nota de implementación:
Si jdk.io.permissionsUseCanonicalPath es true, un simple cpath está dentro de un comodín cpath si y solo si después de eliminar el nombre base (el apellido en la secuencia del nombre de la ruta) del primero, la parte restante es igual al último, un simple cpath está recursivamente dentro de un comodín cpath si y solo si el primero comienza con el segundo.

Si jdk.io.permissionsUseCanonicalPath es false, un simple npath está dentro de un comodín npath si y solo si simple_npath.relativize(wildcard_npath) es exactamente “..”, un simple npath está recursivamente dentro de un comodín npath si y solo si simple_npath.relativize(wildcard_npath) es una serie de uno o más “..”. Esto significa que “/ -” implica “/ foo” pero no “foo”.

Un inválido FilePermission no implica ningún objeto excepto él mismo. Un inválido FilePermission no está implícito en ningún objeto excepto por sí mismo o un FilePermission sobre “> “cuyas acciones son un superconjunto de este inválido FilePermission. Incluso si dos FilePermission se crean con la misma ruta inválida, una no implica la otra.

Parámetros:
p – el permiso para verificar.
Devoluciones:
true si el permiso especificado no es null y está implícito en este objeto, false de lo contrario.

es igual a

publicboolean equals​(Object obj)

Comprueba la igualdad de dos objetos FilePermission. Comprueba que obj es un FilePermission y tiene el mismo nombre de ruta y acciones que este objeto.

Especificado por:
equals en la clase Permission
Nota de implementación:
Más específicamente, dos nombres de ruta son iguales si y solo si tienen la misma bandera comodín y su cpath (si jdk.io.permissionsUseCanonicalPath es true) o npath (si jdk.io.permissionsUseCanonicalPath es false) son iguales. O son ambos “> “.

Cuando jdk.io.permissionsUseCanonicalPath es false, un inválido FilePermission no es igual a ningún objeto excepto a sí mismo, incluso si se crean utilizando la misma ruta no válida.

Parámetros:
obj – el objeto que estamos probando para la igualdad con este objeto.
Devoluciones:
true si obj es un FilePermission y tiene el mismo nombre de ruta y acciones que este objeto FilePermission, false de lo contrario.
Ver también:
Object.hashCode(), HashMap

código hash

publicinthashCode()

Devuelve el valor del código hash para este objeto.

Especificado por:
hashCode en la clase Permission
Devoluciones:
un valor de código hash para este objeto.
Ver también:
Object.equals(java.lang.Object), System.identityHashCode(java.lang.Object)

getActions

publicStringgetActions()

Devuelve la “representación de cadena canónica” de las acciones. Es decir, este método siempre devuelve acciones presentes en el siguiente orden: leer, escribir, ejecutar, eliminar, leer enlace. Por ejemplo, si este objeto FilePermission permite tanto acciones de escritura como de lectura, una llamada a getActions devolverá la cadena “leer, escribir”.

Especificado por:
getActions en la clase Permission
Devoluciones:
la representación de cadena canónica de las acciones.

newPermissionCollection

publicPermissionCollectionnewPermissionCollection()

Devuelve un nuevo objeto PermissionCollection para almacenar objetos FilePermission.

Los objetos FilePermission deben almacenarse de manera que se puedan insertar en la colección en cualquier orden, pero que también habilita el PermissionCollection implies método para ser implementado de una manera eficiente (y consistente).

Por ejemplo, si tiene dos FilePermissions:

  1. "/tmp/-", "read"
  2. "/tmp/scratch/foo", "write"

y estás llamando al implies método con FilePermission:

   "/tmp/scratch/foo", "read,write",
 

entonces el implies La función debe tener en cuenta los permisos “/ tmp / -” y “/ tmp / scratch / foo”, por lo que el permiso efectivo es “leer, escribir” y implies devuelve verdadero. La semántica “implica” para FilePermissions se maneja correctamente mediante el objeto PermissionCollection devuelto por este newPermissionCollection método.

Anulaciones:
newPermissionCollection en la clase Permission
Devoluciones:
un nuevo objeto PermissionCollection adecuado para almacenar FilePermissions.