75 votes

Spring Security peut-il utiliser les méthodes @PreAuthorize on Spring controller?

Spring Security peut-il utiliser les méthodes @PreAuthorize sur les contrôleurs Spring?

74voto

axtavt Points 126632

Oui, ça marche bien.

Vous avez besoin de <security:global-method-security pre-post-annotations="enabled" /> en ...-servlet.xml . Cela nécessite également des mandataires CGLIB . Par conséquent, soit vos contrôleurs ne devraient pas avoir d’interfaces, soit vous devez utiliser proxy-target-class = true .

27voto

Tomasz Points 1678

Voir le Printemps FAQ sur la Sécurité (l'emphase est mienne).

Au Printemps de l'application web, le contexte de l'application qui contient l' Spring MVC de haricots pour le répartiteur de la servlet est souvent séparée de la principales contexte de l'application. Il est souvent défini dans un fichier appelé myapp-servlet.xml où "myapp" est le nom attribué au Printemps DispatcherServlet dans web.xml. Une application peut avoir plusieurs DispatcherServlets, chacune avec sa propre isolé contexte de l'application. Les haricots dans de ces "enfants" contextes ne sont pas visibles par le reste de la application. Le "parent" contexte d'application est chargé par le ContextLoaderListener vous définissez dans votre web.xml et est visible par tous l'enfant contextes. Ce contexte parent est généralement de là que vous définissez votre configuration de sécurité, y compris la l'élément). Suite à toutes les contraintes de sécurité appliquées aux méthodes de ces web haricots ne seront pas appliquées, car les grains ne peuvent pas être vus à partir de la DispatcherServlet contexte. Vous devez déplacer le déclaration pour le contexte web ou déplacé le les haricots que vous voulez sécurisé dans le contexte de l'application.

Généralement, nous recommandons l'application de la méthode de sécurité au service couche plutôt que sur le web individuels des contrôleurs.

Si vous appliquez pointcuts de la couche de service, vous ne devez définir <global-method-security> dans votre application de contexte de sécurité.

18voto

andy Points 885

Si vous êtes à l'aide de Printemps 3.1, vous pouvez faire des trucs sympas avec cette. Jetez un oeil à https://github.com/mohchi/spring-security-request-mapping. C'est un exemple de projet qui intègre @exiger une autorisation préalable avec Spring MVC est RequestMappingHandlerMapping de sorte que vous pouvez faire quelque chose comme:

@RequestMapping("/")
@PreAuthorize("isAuthenticated()")
public String authenticatedHomePage() {
    return "authenticatedHomePage";
}

@RequestMapping("/")
public String homePage() {
    return "homePage";
}

Une demande de "/" lancera un appel authenticatedHomePage() si l'utilisateur est authentifié. Sinon, il va appeler la page d'accueil().

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X