2011-04-29 1 views
0

J'ai la sécurité au niveau de l'URL au niveau de la méthode placée, et également au niveau de la méthode. Mais ma sécurité au niveau de la méthode est contournée une fois que l'utilisateur a été authentifié au niveau de l'URL! Je regardais plus loin et il semble que les éléments suivants de sécurité de niveau url:Sécurité de niveau 3: Échec de l'accès au niveau de la méthode

intercept-url pattern="/**" access="ROLE_USER"

aurait préséance sur ma sécurité au niveau de la méthode (comme ci-dessous l'extrait de code).

@PreAuthorize("hasRole('ROLE_SUPERVISOR')") 
public String supervisorRoleOnly() 
{ 
    return "success!!!" ; 
} 

Je pense que cette méthode jetterait une erreur d'accès refusé, mais non, tout ROLE_USER peut accéder à cette méthode une fois qu'ils sont déjà authentifiées au niveau url.

Je n'ai dans mon security-config.xml:

<global-method-security pre-post-annotations="enabled" > 
    <expression-handler ref="expressionHandler"/> 
</global-method-security> 

Qu'est-ce que je manque?

Répondre

0

Je suppose que cela vaut plus pour les futurs lecteurs, mais lorsque vous activez l'enregistrement de débogage pour la sécurité Spring vous voyez quelque chose faire semblable à ce qui suit:

Looking for Pre/Post annotations for method 'supervisorRoleOnly' on target class 'yourClassName' 
No expression annotations found 
Adding security method [CacheKey[yourClassName; public yourReturnType yourClassName.supervisorRoleOnly()]] with attributes [ROLE_USER] 

est probablement pré-autorisation ignorée.

Questions connexes