Grails3.2.8升级:实现过滤器

Grails3.2.8升级:实现过滤器,grails,Grails,我正在进行从2.4.4版到3.2.8版的Grails升级。我听说Grails3引入了拦截器,但仍然支持过滤器。我想我会继续使用过滤器,因为我有两个广泛的过滤器。下面是一个片段,我基本上检查了请求是什么,并设置了要在视图布局gsp中使用的变量。如何继续使用我创建的过滤器(如何注册此过滤器),或者如何将以下内容转换为拦截器 class AdminMenuFilters { def ACTIVE_CLASS_NAME = "active" def filters = {

我正在进行从2.4.4版到3.2.8版的Grails升级。我听说Grails3引入了拦截器,但仍然支持过滤器。我想我会继续使用过滤器,因为我有两个广泛的过滤器。下面是一个片段,我基本上检查了请求是什么,并设置了要在视图布局gsp中使用的变量。如何继续使用我创建的过滤器(如何注册此过滤器),或者如何将以下内容转换为拦截器

class AdminMenuFilters {

    def ACTIVE_CLASS_NAME = "active"

    def filters = {

        admin(controller:'admin', action:'index') {
            before = {
                request.dashboardActive = ACTIVE_CLASS_NAME
            }
        }

        layout(controller:'layout', action:'*'){
            before = {
                def layoutActive = false
                switch(actionName){
                    case null :
                        layoutActive = true
                        break;
                    case "index" :
                        layoutActive = true
                        break;
                    case "tags" :
                        layoutActive = true
                        break;
                    case "how" :
                        layoutActive = true
                        break;
                }
                if(layoutActive){
                    request.layoutActive = ACTIVE_CLASS_NAME
                }
            }
        }
    }
}

提前感谢您的帮助。

请参阅升级文档,您可以包括一个过滤器插件以继续使用过滤器

我找到了一个推荐使用拦截器的解决方案。我需要为每个控制器创建一个拦截器,而不是一个过滤器,然后使用正则表达式在选择操作时捕获并设置活动变量

使用布局控制器的示例

class LayoutActiveInterceptor{

    LayoutActiveInterceptor(){
        match(controller:"layout", action: ~/(index|tags|how)/)
    }

    boolean before() { 
        request.layoutActive = Constants.ACTIVE_CLASS_NAME
        true 
    }

    boolean after() { true }

    void afterView() {
        // no-op
    }
}
老实说,我认为在这种情况下,一个类文件就足够了。任何关于如何注册过滤器的指导都将不胜感激。提前感谢你的帮助