tags:

views:

39

answers:

2

I am using filters to handle authentication and some other pre-condition checks for a Grails application. I've run into a situation where it'd be nice to ensure that filter A is always invoked before filter B.

According to the documentation the "filters are executed in the order they are defined" but it is unclear what that definition refers to. I am familiar with how that works for JEE ServletFilters, where the sequence is declared by the order of corresponding tags in the web.xml, but as the deployment is handled automatically in Grails, I am not really sure where I could influence the order in which the filters are set up.

Is that possible at all in Grails, and if so, how?

Update

If several filters are declared within one class, it's obvious that they'll be executed in the order that they were declared. I am more concerned with filters defined in different classes and the sequence that those classes will be considered in.

A: 
class MyFilters {
  def filters = {
    myFilter2(controller:'*', action:'*') {}
    myFilter1(controller:'*', action:'*') {}
  }
}

In the example above, myFilter2 will be executed first, after that, myFilter1 will be executed.

The order the filters are defined in the filters-class, the order they are executed in.

Molske
I think I didn't make that clear in my question (I'll fix that), it's about filters defined in different classes. That the filters within a class will be executed in the sequence they are defined there makes complete sense, of course.
Christian Hang
+1  A: 

Molske is correct that they're executed in the order defined in the class. One exception is that the first 'before' filter that returns false stops processing.

There's also a new configuration option 'dependsOn' that you can use to order different filter classes, i.e. that MyFilters2 runs after MyFilters1. See "6.6.4 Filter Dependencies" at http://grails.org/doc/latest/

Burt Beckwith
Thanks, that's the configuration option I was looking for
Christian Hang
http://www.grails.org/doc/latest/guide/single.html#6.6.4%20Filter%20Dependencies for a direct link
Colin Harrington