13

我研究 Grails 已经有一段时间了。并浏览了一些关于过滤器和拦截器的信息。两者都具有几乎相同的功能,即在特定控制器中跟踪会话或重定向未经授权的用户。

但是我很困惑何时以及为什么应该使用过滤器而不是拦截器,反之亦然。假设 Inceptor 有两个控制器方法beforeInterceptorafterInterceptor并且对于 Filters 有三个常见的闭beforeafterafterView

我的问题是对拦截器使用过滤器的优缺点是什么,反之亦然。通过这种方式,我们开发人员可以决定何时、何地以及为什么我们应该在特定控制器中使用过滤器或拦截器来进行一些跟踪、重定向等。

4

2 回答 2

15

当拦截逻辑仅适用于该控制器时,在控制器中使用一个或两个拦截器。

当逻辑应用于多个(或所有)控制器时,或者当您需要在视图呈现后执行某些操作时(没有等效于 afterView 的拦截器),或者您只想将所有内容集中在一个地方而不是分布在不同的控制器文件中。

于 2012-07-26T03:30:48.093 回答
2

旧过滤器(来自 Grails 2)在 Grails 3 中已弃用。过滤器的替代品是拦截器。

拦截器的使用是用于诸如:身份验证、登录等操作
。拦截器(顾名思义)正在拦截传入的 Web 请求并触发相关操作。动作在相关的控制器中定义。

拦截器有一些主要优点(优于过滤器),例如支持静态编译,并支持灵活的配置。
这些是拦截器的主要 3 种方法:
- boolean before() { true }
- boolean after() { true }
- void afterView() { }

Iterceptor 被配置为 Spring Beans(在 Spring 应用程序上下文中)并被配置为通过它们的名称自动连接。

于 2016-06-14T21:20:36.443 回答