Quelle est la différence entre @Sécurisé et @exiger une autorisation préalable au printemps de sécurité 3?
Il n'est pas clair pour moi qu'est-ce que la différence de printemps de sécurité entre :
@PreAuthorize("hasRole('ROLE_USER')")
public void create(Contact contact)
Et
@Secured("ROLE_USER")
public void create(Contact contact)
Je comprends peut exiger une autorisation préalable de travail avec le printemps el mais dans mon exemple, est-il une réelle différence ?
Vous devez vous connecter pour publier un commentaire.
La vraie différence est que
@PreAuthorize
peut travailler avec Le Printemps De L'Expression De La Langue (SpEL). Vous pouvez:SecurityExpressionRoot
.Méthode d'accès arguments (nécessite la compilation avec les informations de débogage ou de la coutume
ParameterNameDiscoverer
):MethodSecurityExpressionHandler
et le définir comme<global-method-security><expression-handler ... /></...>
).Si vous vouliez faire quelque chose comme accéder à la méthode uniquement si l'utilisateur a Role1 et Role2 alors que vous auriez à utiliser @exiger une autorisation préalable de
À l'aide de
Simplement,
@PreAuthorize
est plus récente que@Secured
.Je dis donc qu'il est préférable d'utiliser
@PreAuthorize
comme il est "l'expression" et vous pouvez utiliser des expressions comme hasRole, hasAnyRole, permitAll, etc.À apprendre sur les expressions, voir ces exemples d'expressions.
@PreAuthorize
est différente, il est plus puissant que@Secured
.de sorte que vous ne peut pas exprimer la condition ET l'aide