2012-03-27 2 views
4

Ich brauche eine Funktion auszuführen, bevor jeder def in der Steuerung aufgerufen wird (vor jeder neuen Anforderung an den Server gesendet wird). In dieser Funktion werde ich 1) tun, um eine Sitzung zu überprüfen, ob gültigen Vorwärts die Anforderung an den entsprechenden Aktion & Controller mit dem params 2) reichte eine Hygienisierung Prüfung für Benutzer tun paramswie eine Funktion auszuführen, bevor jede neue Anforderung an einen Controller in Grails vorgelegt

Ich bin mir bewusst, pro Controller Abfangjäger, wie kann ich einen globalen gemeinsamen Interzeptor schreiben?

Wie und wo kann ich diese Funktion in Grails aufrufen? Vielen Dank im Voraus ..

+0

http://grails.org/doc/lat est/guide/theWebLayer.html # Filter – doelleri

Antwort

6

Sie können für genau den gleichen Zweck beforeInterceptor im Controller verwenden. Setzen Sie dies in einen neuen Controller, sagen wir BaseController und fügen Sie all die Dinge ein, die Sie tun möchten, und erweitern Sie dann alle Ihre vorhandenen Controller mit BaseController und Sie können loslegen. Weitere Informationen über beforeInterceptor Click here

Hinweis: Wenn Sie bereits einige gemeinsame Controller haben, die von allen anderen Controllern erweitert wird, keine Notwendigkeit, einen neuen Controller zu implementieren. Implementieren Sie einfach den BeforeInterceptor in diesem Controller selbst.

Alternativ können Sie einen Filter implementiert haben und alle Ihre Sachen in diesem Filter tun. Weitere Informationen zu Filtern in Grails Click Here

+0

Dank Bala, jetzt ich auf den Linien der Filter denke ich habe gerade gelesen, die Dokumentation, aber wie kann ich einen Filter für alle Regler außer AppStartupController machen (alle defs) seit Sitzung wird nicht verfügbar sein in diesem controller noch ... und dann auth def in login controller (die andere def in login controller - logout def muss session check haben). Wie schreibe ich diesen Filter? –

+0

Sie können die folgende Syntax verwenden, um bestimmte Controller filter1 (Controller: 'Buch', invertieren: true) ausschließen { }. Dies würde den Filter1 für alle Controller-Anforderungen mit Ausnahme des Buch-Controllers (BookController) ausführen. Hoffe, das hilft. –

4

können Sie Filter hinzufügen, in folgenden Weise jeder Aktion


class AbcFilters { 
def filters = { 
    abc1(controller: '*', action: '*') { 
    } 

    abc2(controller: '*Test', action: '*') { 
    } 


    abc2(controllerExclude: 'AppStartup*', action: '*') { 

    } 
} 
} 
3

Hier ist ein Filter für jede Aktion in jedem Controller abfangen:

all(controller: '*', action: '*') { 
    before = { 

    } 
    after = { 

    } 
    afterView = { 

    } 
} 

hier ein Filter für die Sitzungsüberprüfung, der die Federsicherheit verwendet:

+0

Danke für die Hilfe, ich bin jetzt das tun, indem Sie eine Zusammenfassung Base-Controller zu schaffen und alle haben es erweitern. In diesem kann ich den beforeInterceptor haben, der die Funktionen aufrufen wird. –

+0

sicher OK, ich denke, Filter ist eine sauberere Art und Weise. – dbrin

Verwandte Themen