на самом деле ваш фильтр должен работать так, как он установлен для каждого контроллера и каждого действия.
Вот пример Grails из справочника:
class SecurityFilters {
def filters = {
loginCheck(controller:'*', action:'*') {
before = {
if(!session.user && !actionName.equals('login')) {
redirect(action:'login')
return false
}
}
}
}
}
Я работал с этим, и он работал для меня.
Что я не уверен, так это о session.merchants
в вашем коде.
Что это ?
Вы следили за этим:
Чтобы создать фильтр, создайте класс, который
заканчивается соглашением Фильтры в
каталог grails-app / conf.
Edit:
Если вы используете Spring Security, вам не нужно добавлять фильтр или перехватчик.
проверьте руководство пользователя: http://burtbeckwith.github.com/grails-spring-security-core/docs/manual/index.html
вы можете настроить его с отображением URL или аннотациями.
ех.
grails.plugins.springsecurity.controllerAnnotations.staticRules = [
'/js/admin/**': ['ROLE_ADMIN'],
'/someplugin/**': ['ROLE_ADMIN']
]
РЕДАКТИРОВАТЬ 2:
Для входа в систему используйте:
def authenticateService
...
def action{
def user = authenticateService.principal()
def username = user?.getUsername()
...