I'd like to create an AuthorizationFilter
in my Grails app that will inspect request parameters and determine whether a user is authorized to proceed with a request. I was hoping I could throw a custom exception from within my AuthorizationFilter
and later handle it with Grails declarative execption handling via a route like:
"403"(controller: 'error', action: 'status403', exception:AuthException)
... but turns out when I try this in grails 2.2.4 (and the latest dev snapshot) I get
java.lang.IllegalArgumentException: Method name must not be null
at grails.plugin.cache.web.ProxyAwareMixedGrailsControllerHelper.retrieveAction(ProxyAwareMixedGrailsControllerHelper.java:41)
So... is there any good way to use declarative exception handling together with filters?
I guess you can handle declarative exception from Controllers
but Filters
. You can use response instead to send the error code
class AuthorizationFilters {
def filters = {
auth(controller: 'error', invert: true) {
before = {
if(1){ //If auth fails
response.sendError(403)
//render(status: 403) //or
//redirect(controller: 'error', action: 'status403') //or
}
return false
}
}
}
}
Above logic will render the response from ErrorController's status403
action based on the UrlMapping
that is provided in the question
Make sure you are excluding error
controller from filters.