为什么grails中的过滤器没有周围的拦截器

时间:2013-04-22 14:31:36

标签: grails

似乎grails中的过滤器没有周围的拦截器。我们在Spring的情况下也是如此。如果我们想按照grails格式实现它,那么最好的方法是什么。

1 个答案:

答案 0 :(得分:1)

你可以在某种程度上模仿它。在before闭包中,您可以检查请求,会话等,并确定是否继续进行常规呼叫。如果您希望可以在过滤器中重定向或呈现响应,并返回false以指示不应调用控制器。

如果要允许控制器继续,则可以在after闭包中进行操作。您可以在before闭包中的请求范围中存储信息(例如request.currentRequestNumber = counter.incrementAndGet())并在after闭包中检索它(例如int currentRequestNumber = request.currentRequestNumber),利用对商店的属性访问权限并检索请求属性。

然而,您无法“呼叫”控制器并检查其结果,并选择是发送该响应,还是修改它,或发送不同的响应。您可以使用响应包装器来执行此操作,其中您有一个捕获已呈现响应的自定义编写器。

请注意,使用常规servlet过滤器(即实现javax.servlet.Filter并在web.xml中注册的类)具有更大的灵活性(但Grails / Groovy帮助较少)。