首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当从过滤器返回false时,Grails URLMapping?

当从过滤器返回false时,Grails URLMapping?
EN

Stack Overflow用户
提问于 2013-04-02 14:29:47
回答 2查看 987关注 0票数 1

我有一个自定义URLMapping,它捕获错误代码并调用一些代码(用于监视5xx/4xx响应):

代码语言:javascript
复制
// 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

干杯。

EN

回答 2

Stack Overflow用户

发布于 2013-04-02 16:38:18

找到一种解决方案--如果筛选失败,请通过所需的操作进行重定向:

代码语言:javascript
复制
redirect(controller:"error", action:"fail4x") 
response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "blah")

它强制错误控制器的触发器,而不需要URLMappings来捕获它。这似乎有点丑陋,所以请随时继续评论!

票数 0
EN

Stack Overflow用户

发布于 2014-04-03 13:39:51

有着相似的解决方案。我们在控制器中捕捉到并发问题,并抛出一个由后续过滤器捕获的异常。这在Grails 1.3.7中起作用。

升级到Grails2.1.0之后,抛出的异常反而生成一个500个错误,由URLMapping捕获。最后,我们在错误控制器中添加了一个操作,该操作与过滤器的工作相同,并且当URLMappings看到带有该异常的500时,只需重定向到它。

希望有一个更干净的方法来处理它,但肮脏的工作解决方案胜过一个干净的破碎的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15766790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档