To create a filter create a class that ends with the convention
Filters in the
grails-app/conf directory. Within this class define a code block called
filters that contains the filter definitions:
class ExampleFilters {
def filters = {
// your filters here
}
}Each filter you define within the
filters block has a name and a scope. The name is the method name and the scope is defined using named arguments. For example if you need to define a filter that applies to all controllers and all actions you can use wildcards:
sampleFilter(controller:'*', action:'*') {
// interceptor definitions
}The scope of the filter can be one of the following things:
- A controller and/or action name pairing with optional wildcards
- A URI, with Ant path matching syntax
Filter rule attributes:
controller - controller matching pattern, by default * is replaced with .* and a regex is compiled
action - action matching pattern, by default * is replaced with .* and a regex is compiled
regex (true/false) - use regex syntax (don't replace '*' with '.*')
uri - a uri to match, expressed with as Ant style path (e.g. /book/**)
find (true/false) - rule matches with partial match (see java.util.regex.Matcher.find())
invert (true/false) - invert the rule (NOT rule)
Some examples of filters include:
- All controllers and actions
all(controller:'*', action:'*') {}
- Only for the
BookController
justBook(controller:'book', action:'*') {}
- All controllers except the
BookController
notBook(controller:'book', invert:true) {}
- All actions containing 'save' in the action name
saveInActionName(action:'save', find:true) {}
someURIs(uri:'/book/**') {}
In addition, the order in which you define the filters dictates the order in which they are executed.