0

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

4

1 回答 1

1

你可以稍微模仿一下。在before闭包中你可以检查请求、会话等,并决定是否继续进行常规调用。如果您愿意,您可以重定向或在过滤器中呈现响应,并返回false以指示不应调用控制器。

如果您想让控制器继续进行,您可以在after闭包中进行工作。您可以在闭包的请求范围内存储信息before(例如request.currentRequestNumber = counter.incrementAndGet())并在闭包中检索它after(例如int currentRequestNumber = request.currentRequestNumber),利用使用属性访问来存储和检索请求属性。

但是,您不能“调用”控制器并检查其结果,并选择是发送该响应、修改它还是发送不同的响应。不过,您可能可以使用响应包装器来做到这一点,其中您有一个自定义编写器来捕获呈现的响应。

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

于 2013-04-22T17:19:06.023 回答