Se encuentra en:
Cacheo del resultado de una operación privilegiada en Java
RECU-0564 (Recurso Ejemplo)
- Área: Control de Acceso y Autenticación
- Carácter del recurso: Obligatorio
- Tecnologías: Java
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
Código | Título | Tipo | Carácter | |
---|---|---|---|---|
LIBP-0254 | Control de acceso | Libro de pautas | Directriz | Obligatoria |