1

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?

4

1 回答 1

3

我想你可以从Controllersbut处理声明性异常Filters。您可以使用 response 来发送错误代码

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

以上逻辑将根据问题中提供的内容呈现来自 ErrorControllerstatus403操作的响应UrlMapping

确保您error从过滤器中排除控制器。

于 2013-08-29T14:56:32.300 回答