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 @PreAuthorize
los 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.