我想在我的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)
那么......是否有任何好的方法可以将声明性异常处理与过滤器一起使用?
答案 0 :(得分:3)
我猜你可以处理来自Controllers
但Filters
的声明性异常。您可以使用响应来发送错误代码
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
控制器。