Grails过滤器与拦截器

Grails过滤器与拦截器,grails,Grails,我研究圣杯已经有一段时间了。扫描了一些关于过滤器和拦截器的信息。两者在跟踪会话或重定向特定控制器中未经授权的用户方面具有几乎相同的功能 但我不明白什么时候为什么我应该使用过滤器而不是拦截器,反之亦然。 假设接收器有两种控制器方法before interceptor和afterInterceptor,对于过滤器,有三种常见的闭包before,before和afterView 我的问题是,对拦截器使用过滤器的利弊是什么,反之亦然。通过这种方式,开发人员可以决定何时、何地以及为什么在特定控制器中使用过

我研究圣杯已经有一段时间了。扫描了一些关于过滤器和拦截器的信息。两者在跟踪会话或重定向特定控制器中未经授权的用户方面具有几乎相同的功能

但我不明白什么时候为什么我应该使用过滤器而不是拦截器,反之亦然。 假设接收器有两种控制器方法
before interceptor
afterInterceptor
,对于过滤器,有三种常见的闭包
before
before
afterView


我的问题是,对拦截器使用过滤器的利弊是什么,反之亦然。通过这种方式,开发人员可以决定何时、何地以及为什么在特定控制器中使用过滤器或拦截器来执行跟踪、重定向等操作。

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

当逻辑应用于多个(或所有)控制器时,或者当您需要在视图呈现后执行某些操作时(没有与afterView等效的拦截器),或者如果您只想将所有内容集中在一个位置而不是分散在单独的控制器文件中,请使用筛选器。

旧筛选器(来自Grails 2)在Grails3中不推荐使用。过滤器的替代品是拦截器

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

拦截器有一些主要的好处(优于过滤器),例如支持静态编译,并支持灵活的配置
以下是拦截器的三种主要方法:
-布尔before(){true}
-布尔after(){true}
-void afterView(){}


ITerceptor被配置为Springbean(在Spring应用程序上下文中),并被配置为通过名称自动连接

我明白了。但是,您是否可以创建一个抽象控制器来保存类似的拦截逻辑,并让此控制器成为所有其他控制器的父控制器?在什么情况下,我们可以说我们需要在its闭包,
afterView
中声明由
Filters
声明的filterering逻辑?然后您需要一点不同的逻辑,因此需要创建另一个抽象控制器。过滤器可以帮助您将代码集中在一个地方,并跳过不需要的依赖项。