Question

J'utilise Grails pour construire une application qui fonctionne principalement comme un cadre de service. Ma question est: Les services peuvent être garantie de la même façon que les contrôleurs

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()
      }
    } 
  } 
}
Était-ce utile?

La solution

Je ne sais pas si le plugin Shiro prend en charge, mais le plug-in Acegi le fait, quoique d'une manière "expérimental" (quoi que cela signifie).

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, Shiro est un peu hors de propos, car ce sont les filtres qui effectuent autorisation, et non Shiro.

Pour répondre à votre question de savoir si vous pouvez utiliser des filtres pour sécuriser les services, la réponse est non, parce que vous avez seulement accès au contrôleur à partir d'un filtre. Cependant, vous pouvez utiliser métaprogrammation Groovy pour faire l'interception de la méthode de style AOP sur les services.

L'approche de base est:

  • Pour chaque service, ajoutez une propriété invokeMethod au MetaClass
  • La valeur de cette propriété doit être une fermeture. Cette fermeture intercepter (à savoir être appelé au lieu de) chaque méthode appelée par le service.
  • Cette fermeture devrait
    • Effectuer les contrôles de sécurité
    • Invoquer la méthode originale si l'autorisation est réussie et lancer une exception (ou montrer une erreur) si l'autorisation échoue

Mis

Si possible, je recommande fortement d'utiliser un plug-in de sécurité éprouvée (par exemple Shiro, Acegi) pour effectuer les contrôles d'autorisation plutôt que vos propres modèles de la manière décrite ci-dessus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top