2010-06-07 5 views
2

Je travaille pour configurer Spring-Security avec une application existante, pour une simple sécurité de base (c'est-à-dire quelles pages un utilisateur peut voir en fonction de ses rôles). La question s'est posée de se demander si nous pouvions définir quels rôles sont requis pour chaque page dans java au lieu du fichier ApplicationContext.xml. L'idée est de les stocker dans une table de notre base de données, afin que nous puissions les changer facilement sans redéploiement. Est-ce possible? Comment?Pouvez-vous configurer Spring-Security par programmation?

Répondre

5

Oui, vous pouvez configurer Spring-Security par programmation. Mais je ne pense pas que ce soit ce que vous voulez/devez faire. La question s'est posée de se demander si nous pouvions définir les rôles requis pour chaque page dans java au lieu du fichier ApplicationContext.xml. Vous pouvez implémenter votre propre classe AccessDecisionManager qui interroge votre base de données pour aller chercher les règles (ou quoi que ce soit) pour chaque ressource/page. Ceci est décrit dans Section IV du manuel SpringSecurity. Alternativement, vous pouvez intégrer votre propre logique de contrôle d'accès personnalisée à l'intérieur de votre contrôleur MVC. Utilisez SpringSecurityContext pour extraire l'objet Authorization de la requête, extraire l'identité et/ou les autorités et implémenter la prise de décision comme vous le souhaitez.

+0

Merci d'avoir souligné ce dont j'avais vraiment besoin. Je viens de finir de le mettre en place, et ça semble fonctionner plutôt bien. –

1

Nous l'avons fait en utilisant des intercepteurs. Fondamentalement, un MethodInterceptor transfère un appel à n'importe quelle méthode que vous voulez (c'est-à-dire obtenir un objet de votre base de données). Vous pouvez alors, par programmation, intercepter l'objet et vérifier l'utilisateur actuel et faire à peu près tout ce que vous voulez en termes de contrôle d'accès. Si cela signifie interroger la base de données pour une liste d'utilisateurs qui ont accès (et donc une liste que vous pouvez modifier sans modifier le code), il en sera ainsi.

Questions connexes