2013-04-02 43 views
1

我有赶上的错误代码,并调用一些代码(用于5XX/4XX反应监测)的自定义urlMapping中:从过滤器返回false时Grails URLMapping?

// Explicit error-handling for monitoring 
"401"(controller:"error", action:"fail4x") 
.. 
"501"(controller:"error", action:"fail5x") 
... 

我也有一个过滤器,做在一些认证的东西之前关闭,如果失败,则将响应状态设置为401,并且还会从过滤器返回false。

问题是401没有被URLMappings捕获。根据文档,从过滤器返回false [[表示]已经处理了所有将来的过滤器和操作都不应该执行的响应] - 所以我猜测Grails几乎可以删除所有内容,包括处理通常会捕获其他4xx错误的URLMapping?

有没有办法解决,使我的401从失败的过滤器是由URLMappings(假设我已经解释了什么是正确的发生,并解释清楚吧!)

[使用Grails 2.1.1]抓

干杯。

回答

0

发现了一个排序的解决方案 - 如果没有过滤器,做一个重定向通过了必要的行动:

redirect(controller:"error", action:"fail4x") 
response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "blah") 

这迫使错误控制的触发,绕过需要URLMappings抓住它。这似乎有点难看,所以请随时留言!

0

有类似的问题与类似的解决方案。我们在控制器中捕获并发问题,并抛出过滤器后捕获的异常。这在Grails 1.3.7中工作

升级到Grails 2.1.0之后,抛出的异常只会产生一个500错误,它被URLMapping所捕获。我们最终在错误控制器中添加了一个与过滤器完成相同工作的动作,并在URLMappings看到带有该异常的500时重定向到该动作。

希望有一个更清洁的方式来处理它,但一个肮脏的工作解决方案击败一个干净的破碎的一个