grails - 修改/覆盖 Grails 插件提供的过滤器

标签 grails filter

在我的 Grails 项目中,我想覆盖插件提供的过滤器,以便它更符合我的需求。

更具体地说,过滤器被定义为适用于所有 Controller 上的所有操作:filterName(controller:"*", action:"*") { ... },我想将其限制为仅某些 Controller 。

我试图在我的项目中创建一个与我要覆盖的过滤器同名的过滤器类,但结果是两个过滤器都在每个请求上执行。

那么有人知道如何更改/覆盖/(甚至停用)插件提供的过滤器吗?提前致谢!

最佳答案

dmahapatro 的回答让我无法找到解决方案:关键概念是访问 filterInterceptor bean,它包含 Grails 应用程序中所有过滤器的定义。它可以被访问,例如在 BootStrap.groovy 文件中,以便在应用程序启动时修改可用的过滤器:

class BootStrap {
    def filterInterceptor

    def init = { servletContext ->
        // modify myPluginFilter provided by plugin so it 
        // is only applied to certain requests
        def myPluginFilterHandler = filterInterceptor.handlers.find{ it.filterConfig.name == 'myPluginFilter' }
        myPluginFilterHandler.filterConfig.scope.controller = 'myController'
        myPluginFilterHandler.filterConfig.scope.action = 'myAction'
        myPluginFilterHandler.afterPropertiesSet()

        log.info "myPluginFilter scope modified"
    }

    ...
}

此代码在应用程序启动时执行一次,它会找到过滤器 myPluginFilter(例如,在插件中定义)并更改其范围(应用它的 Controller 和操作)。

可以通过从 filterInterceptor.handlers 集合中删除 myPluginFilterHandler 来销毁而不是重新定义过滤器。

关于grails - 修改/覆盖 Grails 插件提供的过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16417789/

相关文章:

grails - Grails-Maven-STS

java - 将 Grails 从 2.4.3 升级到 3.2.x 是否会改进 IDE 支持以及构建和启动时间

django - 使用 Django 通用 View 时,我可以过滤 request.user 吗?

swift - 为什么我不能使用 searchBar 搜索名字和姓氏?

python - 如何过滤数组中与某个字典属于同一家族或层次结构的所有字典?

gradle - 无法让 Micrometer Prometheus 下载到我的 Grails 2 应用程序中

Grails:在 Controller 的基类中重定向或转发后防止进一步执行代码

grails - 剑道网格按降序排序

extjs - 如何设置 Ext Grid 过滤器默认值?

ios - 查找searBar.text是否包含整数字符串?