Si entiendo correctamente AccessController.doPrivileged, significa que el código que no es de confianza debe poder invocar los métodos que requieren permisos (como System.getProperty()
) a través de un método intermedio que tiene.¿Cuándo se debe usar AccessController.doPrivileged()?
Esto hace surgir la pregunta: ¿cuándo se debe usar AccessController.doPrivileged()
? ¿Cuándo se debe permitir que el código que no es de confianza invoque código privilegiado a través de métodos intermedios? ¿Cuándo debería fallar?
Siguiendo su razonamiento, explique por qué la creación cargador de clases siempre se debe permitir: http://findbugs.sourceforge.net/bugDescriptions.html#DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED
@Ash, dado A que tiene permiso para invocar X pero B no lo hace, y A invoca B que invoca X. Does doPrivileged() significa que "B no tiene permiso para invocar X, pero lo hago y respondo por él. Entonces, ¿ahora A puede invocar X "? – Gili
@Gili, tengo entendido que el bloque doPrivileged() asume los permisos del dominio de protección actual, excluyendo todo lo que esté más atrás en la pila. No necesariamente transferirá los permisos hacia adelante a futuras llamadas que tengan permisos menores (estoy trabajando desde la memoria e interpretando la documentación, vea mi comentario en la respuesta de Suraj). – Ash