Cacheo del resultado de una operación privilegiada en Java

RECU-0564 (Recurso Ejemplo)

Descripción

El cálculo de los privilegios correspondientes a un usuario puede llevar a error. Por ello, es recomendable utilizar la API AccessController para asegurar que la restricción de permisos de realiza de forma correcta.

Ejemplos

private static final Map cache; 
public static Thing getThing(String key) {
    //Try
    cache.CacheEntry entry = cache.get(key);
    if (entry != null) {
        // Asegurando que se requieren permisos antes de devolver un resultado cacheado.
        AccessController.checkPermission(entry.getPermission());
        return entry.getValue();
    }
    // Asegurando que no se elevan privilegios.
    Permission perm = getPermission(key);
    AccessController.checkPermission(perm);
    // Creando un nuevo valor con los permisos exactos.
    PermissionCollection perms = perm.newPermissionCollection();
    perms.add(perm);
    Thing value = AccessController.doPrivileged(new PrivilegedAction() { public Thing run() { return createThing(key); }}, new AccessControlContext(new ProtectionDomain[] { new ProtectionDomain( null, perms) } ) );
    cache.put(key, new CacheEntry(value, perm));
    return value;
}

Contenidos relacionados

Pautas
Área: Desarrollo » Seguridad » Control de Acceso y Autenticación
Código Título Tipo Carácter
LIBP-0254 Control de acceso Libro de pautas Directriz Obligatoria