【问题标题】:Grails Filters vs InterceptorGrails 过滤器与拦截器
【发布时间】:2012-07-26 02:54:20
【问题描述】:

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

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

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

【问题讨论】:

    标签: grails


    【解决方案1】:

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

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

    【讨论】:

    • 我明白了。但是你不是可以创建一个抽象控制器来保存类似的拦截逻辑,并让这个控制器成为所有其他控制器的父级吗?在什么情况下,我们可以说我们需要 Filters 在其闭包 afterView 中声明的过滤逻辑?
    • 然后你需要一些不同的逻辑,所以需要创建另一个抽象控制器。过滤器可以帮助您将代码集中在一个地方并跳过您并不真正需要的依赖项。
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-02-15
      • 2016-08-05
      • 2014-06-16
      • 2011-03-16
      • 1970-01-01
      • 2011-04-24
      • 2014-04-07
      • 2014-03-10
      • 1970-01-01
      相关资源
      最近更新 更多