Grails 圣杯:Don';t向前运行过滤器(不使用闪存变量)

Grails 圣杯:Don';t向前运行过滤器(不使用闪存变量),grails,filter,forward,Grails,Filter,Forward,我正在编写一个插件,用于跟踪用户在应用程序中访问过的页面(用于返回按钮)。它通过为每个控制器/操作运行一个过滤器来实现这一点,并保留访问页面的列表。一切都很好,除了在使用转发的应用程序中使用时,插件会为一个页面记录两个条目,因为Grails过滤器会在每个请求上运行,即使该请求只是一个转发(即:内部重定向) 由于这是一个插件(必须与应用程序无关),所以每当使用转发来检查是否发生转发时,我不能简单地设置一个flash变量。有没有办法确定过滤器中是否发生了转发?我正在探索request变量中的不同值,

我正在编写一个插件,用于跟踪用户在应用程序中访问过的页面(用于返回按钮)。它通过为每个控制器/操作运行一个过滤器来实现这一点,并保留访问页面的列表。一切都很好,除了在使用转发的应用程序中使用时,插件会为一个页面记录两个条目,因为Grails过滤器会在每个请求上运行,即使该请求只是一个转发(即:内部重定向)

由于这是一个插件(必须与应用程序无关),所以每当使用转发来检查是否发生转发时,我不能简单地设置一个flash变量。有没有办法确定过滤器中是否发生了转发?我正在探索request变量中的不同值,以及它们在普通请求和转发之间的区别,但是事情可能会变得相当混乱。非常感谢您的帮助

另外,到目前为止我注意到的主要区别是转发的request.forwardURI和request.requestURI不同,然而,requestURI是一种特殊的格式,我目前不知道如何转换以匹配forwardURI

例如,对于普通请求:

request.forwardURI = '/short-url' (as set in URLMappings) or '/controller/action
request.requestURI = '/grails/controller/action.dispatch'
对于前锋:

request.forwardURI = '/short-url' (as set in URLMappings) or '/controller/action'
request.requestURI = '/grails/forwardedController/forwardedAction.dispatch'