Grails是否允许使用过滤器进行声明性异常处理?

时间:2013-08-29 14:10:57

标签: grails exception-handling authorization servlet-filters before-filter

我想在我的Grails应用中创建一个AuthorizationFilter,它将检查请求参数并确定用户是否有权继续处理请求。我希望我可以从我的AuthorizationFilter中抛出一个自定义异常,然后通过以下路由处理它的Grails声明性处理:

"403"(controller: 'error', action: 'status403', exception:AuthException)

...但是当我在grails 2.2.4(和最新的开发快照)中尝试这个时,我得到了

java.lang.IllegalArgumentException: Method name must not be null
    at grails.plugin.cache.web.ProxyAwareMixedGrailsControllerHelper.retrieveAction(ProxyAwareMixedGrailsControllerHelper.java:41)

那么......是否有任何好的方法可以将声明性异常处理与过滤器一起使用?

1 个答案:

答案 0 :(得分:3)

我猜你可以处理来自ControllersFilters的声明性异常。您可以使用响应来发送错误代码

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

以上逻辑将根据问题中提供的status403呈现ErrorController的UrlMapping操作的响应

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