似乎grails中的过滤器没有周围的拦截器。我们在Spring的情况下也是如此。如果我们想按照grails格式实现它,那么最好的方法是什么。
答案 0 :(得分:1)
你可以在某种程度上模仿它。在before
闭包中,您可以检查请求,会话等,并确定是否继续进行常规呼叫。如果您希望可以在过滤器中重定向或呈现响应,并返回false
以指示不应调用控制器。
如果要允许控制器继续,则可以在after
闭包中进行操作。您可以在before
闭包中的请求范围中存储信息(例如request.currentRequestNumber = counter.incrementAndGet()
)并在after
闭包中检索它(例如int currentRequestNumber = request.currentRequestNumber
),利用对商店的属性访问权限并检索请求属性。
然而,您无法“呼叫”控制器并检查其结果,并选择是发送该响应,还是修改它,或发送不同的响应。您可以使用响应包装器来执行此操作,其中您有一个捕获已呈现响应的自定义编写器。
请注意,使用常规servlet过滤器(即实现javax.servlet.Filter
并在web.xml中注册的类)具有更大的灵活性(但Grails / Groovy帮助较少)。