2010-02-03 19 views
1

J'utilise grails pour construire une application qui fonctionne principalement comme un framework de service. Ma question est la suivante: les services peuvent-ils être sécurisés de la même manière que les contrôleurs?Utiliser Shiro pour sécuriser des services dans les grails

exemple à base uri-:

class SecurityFilters { 
    def filters = { 
    all(uri: "/**") { 
     before = { 
     // Ignore direct views (e.g. the default main index page). 
     if (!controllerName) return true 
     // Access control by convention. 
     accessControl() 
     } 
    } 
    } 
} 

Répondre

3

Je ne sais pas si le plugin Shiro prend en charge, mais le fait Acegi plugin, bien que d'une façon "expérimentale" (quoi que de moyens).

Mise à jour

Après avoir lu la question correctement, il semble que vous vous demandez si vous pouvez utiliser des filtres pour obtenir des services. Si tel est le cas, alors Shiro n'est pas pertinent, car ce sont les filtres qui effectuent l'autorisation, pas Shiro. Donc, pour répondre à votre question à savoir si vous pouvez utiliser des filtres pour sécuriser des services, la réponse est non, car vous n'avez accès au contrôleur qu'à partir d'un filtre. Toutefois, vous pouvez utiliser la métaprogrammation Groovy pour effectuer une interception de méthode AOP sur les services.

L'approche de base est:

  • Pour chaque service, ajouter une propriété invokeMethod au MetaClass
  • La valeur de cette propriété devrait être une fermeture. Cette fermeture interceptera (c'est-à-dire sera appelée à la place de) chaque méthode appelée sur le service.
  • Cette fermeture devrait
    • Effectuer les contrôles de sécurité
    • invoquons la méthode originale si l'autorisation est réussie et lancer une exception (ou montrer une erreur) si l'autorisation ne

En plus

Si possible, je recommande fortement d'utiliser un n plugin de sécurité (par ex. Shiro, Acegi) pour effectuer les contrôles d'autorisation plutôt que de rouler les vôtres de la manière décrite ci-dessus.

+0

Merci. J'utilise shiro, pas acegi. Je voudrais profiter du filtrage pour sécuriser les services. Désolé si ce n'était pas clair. – Brandon

+0

Merci pour les conseils fantastiques. – Brandon