2011-11-09 6 views
0

Est-il possible de protéger mes classes @Controller à l'aide de pointcut? J'ai essayé:Spring Security/AspectJ pointcut

<global-method-security pre-post-annotations="enabled"> 
    <!-- Block anything ending with the word 'Controller'--> 
    <protect-pointcut expression="execution(* my.pkg.*Controller.*(..))" access="NON_EXISTANT_ROLE"/> 
</global-method-security> 

En théorie, je ne devrais jamais pouvoir frapper le contrôleur parce que le rôle n'existe pour aucun utilisateur. Cependant, le contrôleur fonctionne bien.

+0

Quelle version de la sécurité de ressort utilisez-vous? – Ritesh

+0

J'utilise la version 3.0.7 – user973479

+0

J'ai eu ce problème avant 3.0.5. Assurez-vous également que la sécurité de la méthode globale est présente dans le contexte du contrôleur. – Ritesh

Répondre

0

Voir Spring Security FAQ (emphase mienne).

Dans une application web Spring, le contexte d'application qui contient les beans Spring MVC pour le servlet répartiteur est souvent séparé du contexte d'application principale . Il est souvent défini dans un fichier appelé myapp-servlet.xml, où «myapp» est le nom attribué au Spring DispatcherServlet dans web.xml. Une application peut avoir plusieurs DispatcherServlets , chacun avec son propre contexte d'application isolé. Les beans dans ces contextes "enfant" ne sont pas visibles par le reste de l'application . Le contexte de l'application "parent" est chargé par le ContextLoaderListener que vous définissez dans votre fichier web.xml et est visible par tous les contextes enfants . Ce contexte parent est généralement celui où vous définissez votre configuration de sécurité, y compris l'élément . Par conséquent, les contraintes de sécurité appliquées aux méthodes dans ces beans Web ne seront pas appliquées, car les beans ne peuvent pas être vus à partir du contexte DispatcherServlet. Vous devez déplacer la déclaration vers le contexte Web ou déplacé les beans que vous souhaitez sécuriser dans le contexte d'application principal.

Généralement, nous recommandons d'appliquer la sécurité de la méthode au niveau de la couche de service plutôt que sur les contrôleurs Web individuels.

Si vous appliquez pointcuts à la couche de service que vous devez régler <global-method-security> dans le contexte de la sécurité de votre application.

Questions connexes