Question

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?

Was it helpful?

Solution

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top