## 6.6.1 Applying Filters

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) {}

- Applied to a URI space

    someURIs(uri:'/book/**') {}

- Applied to all URIs

    allURIs(uri:'/**') {}

In addition, the order in which you define the filters dictates the order in which they are executed.