Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails中URL映射之前的触发器筛选器_Grails_Filter_Servlet Filters - Fatal编程技术网

Grails中URL映射之前的触发器筛选器

Grails中URL映射之前的触发器筛选器,grails,filter,servlet-filters,Grails,Filter,Servlet Filters,在执行urlmapping之前,我想触发一个过滤器,我该怎么做? 下面是一个场景,用户在www.myapp.com/someurl中键入,而“someurl”未映射到UrlMappings.groovy,因此用户将被重定向到404页面。但我想在转到404页之前拦截这个过程。“someurl”可以是任何内容,也可以是“/users”、“users/admin/43”或任何内容 我发现的一个选择是使用servlet级别的过滤器,但这似乎给我带来了比我预想的更多的麻烦;添加此过滤器不允许页面呈现,我只

在执行urlmapping之前,我想触发一个过滤器,我该怎么做? 下面是一个场景,用户在www.myapp.com/someurl中键入,而“someurl”未映射到UrlMappings.groovy,因此用户将被重定向到404页面。但我想在转到404页之前拦截这个过程。“someurl”可以是任何内容,也可以是“/users”、“users/admin/43”或任何内容

我发现的一个选择是使用servlet级别的过滤器,但这似乎给我带来了比我预想的更多的麻烦;添加此过滤器不允许页面呈现,我只得到一个空白的白色屏幕。还有别的办法吗


基本上,我正在尝试在url映射中验证之前重写url。

如果我理解正确,您希望的是让用户键入他们想要的任何URI,然后您希望自己检查URI,并可能重定向到常规url映射之一?我在我的项目中做了类似的事情,首先我更改了默认url映射:

"/url/$controller/$action?/$id?"{
    constraints {
        // apply constraints here
    }
}
然后又加了一个

"/$level1/$level2?/$level3?/$level4?"(controller: 'anything', action: 'resolve') {
}
然后是一个控制器,类似于:

class AnythingController {
    def resolve(String level1, String level2, String level3, String level4) {
        if (level1 == 'music') {
            return redirect (controller: 'music')
        } else {
            // any logic you need
        }
    }
}

通过这种方式,您可以处理控制器中的任何内容,如果您想使用常规的/controller/action uri,那么只需在它前面加上/url

使用Grails过滤器并重定向到url映射中列出的新url有什么错?从你的问题中很难理解你想做什么以及你遇到了什么问题。我对这个问题做了更多的描述。因此,基本上你是在试图截取某个东西之前到达url映射并确定它是404?@EddardStark使用过滤器将url映射到另一个url不是一个好主意,使用url映射,这就是我们拥有它们的原因。@Joshuamore是的!确切地是的,有点像,但不完全是这样。我们正在对整个应用程序实施大规模url更改。所以,像/user应该是/user-area或者/admin应该是/admin-area之类的URL。url更改非常简单,但我担心应用程序内和应用程序外对这些页面的所有引用。所以我想添加一个过滤器或任何东西来将/user重定向到/user区域等等。