secured preauthorize method jsr250enabled hasrole examples enableglobalmethodsecurity spring-security

spring-security - preauthorize - spring security method



¿Cuál es la diferencia entre @Secured y @PreAuthorize en spring security 3? (5)

No está claro para mí cuál es la diferencia en la seguridad de primavera entre:

@PreAuthorize("hasRole(''ROLE_USER'')") public void create(Contact contact)

Y

@Secured("ROLE_USER") public void create(Contact contact)

Entiendo que PreAuthorize puede funcionar con Spring el pero en mi muestra, ¿hay alguna diferencia real?


La verdadera diferencia es que @PreAuthorize puede funcionar con Spring Expression Language (SpEL) . Usted puede:


Si quieres hacer algo como acceder al método solo si el usuario tiene Role1 y Role2, deberías usar @PreAuthorize

@PreAuthorize("hasRole(''ROLE_role1'') and hasRole(''ROLE_role2'')")

Utilizando

@Secured({"role1", "role2"}) is treated as an OR


Simplemente, @PreAuthorize es más nuevo que @Secured .

Entonces digo que es mejor usar @PreAuthorize ya que está "basado en expresiones" y puedes usar expresiones como hasRole, hasAnyRole, permitAll, etc.

Para aprender sobre expresiones, mira estas expresiones de ejemplo .


@PreAuthorize es diferente, es más poderoso que @Secured .

  • Las anotaciones @Secured más @Secured no permitían el uso de expresiones.

  • A partir de Spring Security 3, se @PreAuthorize anotaciones más flexibles @PreAuthorize y @PostAuthorize (así como @PreFilter y @PostFilter), ya que admiten Spring Expression Language (SpEL) y proporcionan control de acceso basado en expresiones.

  • @Secured("ROLE_ADMIN") es la misma que @PreAuthorize ("hasRole(''ROLE_ADMIN'')") .

  • El @Secured({"ROLE_USER","ROLE_ADMIN") se considera ROLE_USER O ROLE_ADMIN.

por lo que no puede expresar la condición Y usando

@Secured . Puede definir lo mismo con @PreAuthorize("hasRole(''ADMIN OR hasRole(''USER'')") , que es más fácil de entender. Puede expresar AND, OR, o NOT (!) También.

@PreAuthorize ("! IsAnonymous () AND hasRole (''ADMIN'')")


+-----------------------------------------------+----------------------------------------------------------+-----------------------------------------------------------------+ | | @Secured | @PreAuthorize | +-----------------------------------------------+----------------------------------------------------------+-----------------------------------------------------------------+ | Spring EL expressions | Does''nt supports. | Supports | +-----------------------------------------------+----------------------------------------------------------+-----------------------------------------------------------------+ | Multiple roles conjunctions with AND operator | Does''nt supports.(If there are multiple roles defined | Supports | | |they will be automatically combined with OR operator) | | +-----------------------------------------------+----------------------------------------------------------+-----------------------------------------------------------------+ | To enable annotation | Add following line to spring-security.xml | Add following line to spring-security.xml | | | <global-method-security secured-annotations="enabled" /> | <global-method-security pre-post-annotations="enabled"/> | +-----------------------------------------------+----------------------------------------------------------+-----------------------------------------------------------------+ | Example | @Secured({ROLE_ADMIN , ROLE_USER}) | @PreAuthorize("hasRole(''ROLE_USER'') and hasRole(''ROLE_ADMIN'')") | | | public void addUser(UserInfo user){...} | public void addUser(UserInfo user){...} | +-----------------------------------------------+----------------------------------------------------------+-----------------------------------------------------------------+