问题 Grails Filters vs Interceptor


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

但我很困惑何时以及为什么我应该使用Filter而不是Interceptor,反之亦然。 鉴于Inceptors有两种控制器方法 beforeInterceptor 和 afterInterceptor 对于过滤器,有三个常见的闭包 beforeafter 和 afterView

我的问题是使用Filter for Interceptor的优点和缺点是什么,反之亦然。通过这种方式,我们开发人员可以决定何时,何地以及为什么我们应该使用特定Controller中的Filter或Interceptor进行一些跟踪,重定向等。


4557
2017-07-26 02:54


起源



答案:


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

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


14
2017-07-26 03:30



我懂了。但是,您是否可以创建一个抽象控制器来保存类似的拦截逻辑并让该控制器成为所有其他控制器的父级?在什么情况下我们可以说我们需要声明过滤逻辑 Filters 在其关闭, afterView? - Kaido Shugo
然后你需要一点不同的逻辑,所以需要创建另一个抽象控制器。过滤器可以帮助您将代码集中在一个位置并跳过您不需要的依赖项。 - Mr. Cat


答案:


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

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


14
2017-07-26 03:30



我懂了。但是,您是否可以创建一个抽象控制器来保存类似的拦截逻辑并让该控制器成为所有其他控制器的父级?在什么情况下我们可以说我们需要声明过滤逻辑 Filters 在其关闭, afterView? - Kaido Shugo
然后你需要一点不同的逻辑,所以需要创建另一个抽象控制器。过滤器可以帮助您将代码集中在一个位置并跳过您不需要的依赖项。 - Mr. Cat


Grails 3中不推荐使用旧过滤器(来自Grails 2)。过滤器的替换是拦截器。

拦截器的使用适用于以下操作:身份验证,登录等。
拦截器(顾名思义)拦截传入的Web请求并触发相关操作。这些操作在相关的Controller中定义。

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

Iterceptors配置为Spring Beans(在Spring应用程序上下文中),并配置为按名称自动连接。


0
2018-06-14 21:20