Printemps de Sécurité avec les rôles et les autorisations
Je suis en train de configurer la Sécurité basée sur les rôles avec des autorisations. Je suis en train de le faire avec Ressort de Sécurité.
Je ne veux pas configurer ACL comme il semble qu'il est trop pour mes besoins.
Je veux juste avoir de simples autorisations et les rôles décrits dans ce l'article.
Malheureusement, l'article n'explique pas comment mettre en œuvre la solution donnée.
Quelqu'un a déjà essayé et peut me pointer dans la bonne direction? Peut-être il ya une autre entrée de blog qui décrit la mise en œuvre?
Merci beaucoup.
- Pour tous ceux qui arrivent ici, il y a un article qui résout exactement mon problème. Jetez un oeil à ceci
- J'ai lu l'article et j'essaie de mettre cela en œuvre. Voulez-vous me dire comment avez-vous mettre en œuvre que SpringSecurityDaoImpl classe? @Exiger une autorisation préalable n'affecte pas mon url à tous! J'ai fait exactement comme la matière dans cet article.
- Vous n'avez pas à mettre en œuvre les
SpringSecurityDaoImpl
juste étendreJdbcDaoImpl
comme dans l'exemple. Assurez-vous de regarder l'exemple de code sur github, qui est référencé dans l'article.
Vous devez vous connecter pour publier un commentaire.
À la mettre en œuvre, il semble que vous avez à:
org.springframework.security.authentication.ProviderManager
et de la configurer (ensemble de ses fournisseurs) à une coutumeorg.springframework.security.authentication.AuthenticationProvider
.Ce dernier doit retourner sur sa méthode d'authentification Authentification, qui doivent être programmés avec le
org.springframework.security.core.GrantedAuthority
, dans votre cas, toutes les autorisations pour un utilisateur donné.L'astuce, cet article est pour avoir des rôles attribués aux utilisateurs, mais, pour définir les autorisations pour ces rôles dans le
Authentication.authorities
objet.Pour que je vous en conseille la lecture de l'API, et de voir si vous pouvez étendre certains de base ProviderManager et AuthenticationProvider au lieu de la mise en œuvre de tout. Je l'ai fait avec
org.springframework.security.ldap.authentication.LdapAuthenticationProvider
réglage personnalisé LdapAuthoritiesPopulator, qui permettrait de récupérer correctement les rôles de l'utilisateur.Espère que cette fois j'ai obtenu ce que vous cherchez.
Bonne chance.
Je suis l'auteur de l'article en question.
Aucun doute, il existe de multiples façons de le faire, mais la façon dont je le faire est de mettre en œuvre une coutume
UserDetails
qui sait à propos des rôles et des autorisations.Role
etPermission
sont juste des classes personnalisées que vous écrivez. (Rien de compliqué--Role
a un nom et un ensemble dePermission
cas, etPermission
a un nom.) Puis legetAuthorities()
retourneGrantedAuthority
des objets qui ressemblent à ceci:PERM_CREATE_POST
,PERM_UPDATE_POST
,PERM_READ_POST
au lieu de retourner les choses comme
ROLE_USER
,ROLE_MODERATOR
Les rôles sont toujours disponibles si votre
UserDetails
la mise en œuvre a ungetRoles()
méthode. (Je vous conseille d'en avoir un.)L'idéal est d'attribuer des rôles de l'utilisateur et les autorisations associées sont automatiquement remplis. Cela implique d'avoir un custom
UserDetailsService
qui sait comment effectuer ce mappage, et tout ce qu'elle a à faire est la source de la cartographie de la base de données. (Voir l'article pour le schéma.)Ensuite, vous pouvez définir des règles d'autorisation en termes d'autorisations au lieu de rôles.
Espère que ça aide.
Les étapes de base sont:
Utiliser un fournisseur d'authentification personnalisé
Faire de votre fournisseur personnalisé de retour personnalisé
UserDetails
mise en œuvre. CetteUserDetailsImpl
aura ungetAuthorities()
comme ceci:De cours à partir d'ici, vous pouvez appliquer un lot d'optimisations/personnalisations pour vos besoins spécifiques.
C'est la façon la plus simple de le faire. Permet autorités de groupe, aussi bien que les autorités.
Puis dans META-INF/applicationContext-security.xml
Juste un souci d'exhaustivité (peut-être que quelqu'un d'autre de ne pas avoir à mettre en œuvre à partir de zéro):
Nous avons mis en place notre propre petite bibliothèque, comme tout le monde. Il est censé rendre les choses plus facile, de sorte que nos développeurs de ne pas avoir à ré-écrire à chaque fois. Ce serait formidable si le printemps de sécurité à fournir un soutien de rbac hors de la boîte, que cette approche est beaucoup mieux que l'autorisation par défaut basé sur un.
Ont un coup d'oeil à Github (OSS, licence MIT) pour voir si cela convient à vos besoins. En gros, c'est seulement aborder le rôle de <-> privilèges de la cartographie. Le morceau manquant, vous aurez à fournir sur votre propre est fondamentalement à l'utilisateur <-> les rôles de cartographie, par exemple, de la cartographie des groupes (racf/groupes d'annonces) aux rôles (1:1) ou par la mise en œuvre d'un supplémentaire de cartographie. Que l'on est différent dans chaque projet, de sorte qu'il n'est pas judicieux de fournir certaines de mise en œuvre.
Nous avons essentiellement utilisé cette en interne, de sorte que nous pouvons commencer avec rbac depuis le début. On peut toujours la remplacer par une autre implémentation plus tard, si la demande est en croissance, mais il est important pour nous d'obtenir le programme d'installation de la droite au début.
Si vous n'utilisez pas rbac, il ya une bonne chance que les autorisations sont dispersés à travers la base de code et vous aurez un moment difficile d'extraire/groupe de personnes (dans des rôles) plus tard.
Les graphiques générés faire aussi aider à la raison à ce sujet/restructurer plus tard.