Saltar al contenido

@RolesAllowed frente a @PreAuthorize frente a @Secured

Recabamos en diferentes espacios y de esta manera mostrarte la respuesta para tu problema, si continúas con alguna inquietud deja la pregunta y te respondemos porque estamos para ayudarte.

Solución:

Anotaciones de seguridad

Todo @PreAuthorize, @RolesAllowed y @Secured son anotaciones que permiten configurar seguridad del método. Se pueden aplicar tanto a métodos individuales como a nivel de clase, en este último caso las restricciones de seguridad se aplicarán a todos los métodos de la clase.

La seguridad a nivel de método se logra utilizando proxies Spring AOP.

@PreAuthorize

@PreAuthorize anotación permite especificar restricciones de acceso a un método usando el Lenguaje de expresión de primavera (SpEL). Estas restricciones se evalúan antes de que se ejecute el método y pueden resultar en la denegación de la ejecución del método si no se cumplen las restricciones. los @PreAuthorize La anotación es parte del marco Spring Security.

Para poder usar @PreAuthorizelos prePostEnabled attribute en el
@EnableGlobalMethodSecurity la anotación debe establecerse en true:

@EnableGlobalMethodSecurity(prePostEnabled=true)

@RolesAllowed

@RolesAllowed La anotación tiene su origen en el estándar de seguridad Java JSR-250. Esta anotación es más limitado que la @PreAuthorize anotación porque solo admite seguridad basada en roles.

Para usar el @RolesAllowed anotación la biblioteca que contiene esta anotación debe estar en el classpath, ya que no es parte de Spring Security. además, el jsr250Enabled attribute de El @EnableGlobalMethodSecurity la anotación debe establecerse en true:

@EnableGlobalMethodSecurity(jsr250Enabled=true)

@Secured

@Secured anotación es un anotación heredada de Spring Security 2 que se puede utilizar para configurar la seguridad del método. Admite más que solo seguridad basada en roles, pero no admite el uso de Spring Expression Language (SpEL) para especificar restricciones de seguridad. Se recomienda utilizar el @PreAuthorize anotación en aplicaciones nuevas sobre esta anotación.

Apoyo a la @Secured la anotación debe estar explícitamente habilitada en el
@EnableGlobalMethodSecurity anotación usando el securedEnabled attribute:

@EnableGlobalMethodSecurity(securedEnabled=true)

Qué anotaciones de seguridad permiten usar SpEL

La siguiente tabla muestra el soporte para Spring Expression Language en las anotaciones de seguridad que se pueden usar con Spring Security 5:

╔═════════════════════╦═══════════════════╗
║ Security Annotation ║ Has SpEL Support? ║
╠═════════════════════╬═══════════════════╣
║  @PreAuthorize      ║        yes        ║
╠═════════════════════╬═══════════════════╣
║  @PostAuthorize     ║        yes        ║
╠═════════════════════╬═══════════════════╣
║  @PreFilter         ║        yes        ║
╠═════════════════════╬═══════════════════╣
║  @PostFilter        ║        yes        ║
╠═════════════════════╬═══════════════════╣
║  @Secured           ║        no         ║
╠═════════════════════╬═══════════════════╣
║  @RolesAllowed      ║        no         ║
╚═════════════════════╩═══════════════════╝

@Secured y @RolesAllowed realizar una funcionalidad idéntica en Spring. la diferencia es que @Secured es una anotación específica de Spring, mientras que @RolesAllowed es una anotación estándar de Java (JSR250). Ninguna de estas anotaciones admite SpEL.

@PreAuthorize es otra anotación específica de Spring. Puede realizar operaciones mucho más poderosas con @PreAuthorize utilizando SpEL. Puede escribir expresiones para limitar la invocación del método en función de los roles/permisos, el usuario autenticado actual y los argumentos pasados ​​al método.

@PreAuthorize("hasRole('ADMIN') or #user.id == authentication.name")
public void deleteUser(User user) 
    ...

http://docs.spring.io/autorepo/docs/spring-security/4.0.x/reference/html/el-access.html#el-common-built-in


En cuanto a cuál usar, realmente depende de usted. @Secure y @PreAuthorize vinculará su código a Spring. Si estar atado a Spring no es un problema o necesita realizar operaciones más poderosas, use @PreAuthorize.

Todos estos son básicamente lo mismo para su propósito, pero @PreAuthorize es la mejor opción para controladores y métodos de controlador. @Secured y @RolesAllowed están destinados a describir la seguridad de la capa de servicio attributes.

También tenga en cuenta para @PreAuthorize anotación para trabajar debe definir una clase de configuración:

@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration 
...

Si estás contento con lo expuesto, puedes dejar un enunciado acerca de qué le añadirías a esta división.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *