我一直在研究Grails已经有一段时间了。并扫描了一下有关滤波器和拦截器的信息。两者都具有跟踪会话或重定向特定控制器中未授权用户的功能几乎相同。
但我很困惑何时以及为什么我应该使用Filter而不是拦截器,反之亦然。
鉴于Inceptors有两个控制器方法beforeInterceptor
和afterInterceptor
,而且过滤器有三个常见的闭包before
,after
和afterView
。
我的问题是使用Filter for Interceptor的优点和缺点是什么,反之亦然。通过这种方式,我们开发人员可以决定何时,何地以及为什么我们应该使用特定Controller中的Filter或Interceptor进行跟踪,重定向等。
答案 0 :(得分:14)
当拦截逻辑仅适用于该控制器时,在控制器中使用一个或两个拦截器。
当逻辑应用于多个(或所有)控制器时,或者在渲染视图后需要执行某些操作时(使用afterView等效的拦截器),或者只是想将所有内容集中在一个放置而不是分散在单独的控制器文件中。
答案 1 :(得分:1)
Grails 3中不推荐使用旧过滤器(来自Grails 2)。过滤器的替换是拦截器。
拦截器的使用适用于以下操作:身份验证,登录等 拦截器(顾名思义)拦截传入的Web请求并触发相关操作。这些操作在相关的Controller中定义。
拦截器具有一些主要优点(通过过滤器),例如支持静态编译,并启用灵活配置。
这些是拦截器的主要3种方法:
- boolean before(){true}
- boolean after(){true}
- void afterView(){}
Iterceptors配置为Spring Beans(在Spring应用程序上下文中),并配置为按名称自动连接。