我正在编写一个插件,用于跟踪用户在应用程序中访问过的页面(用于后退按钮)。它通过为每个控制器/操作运行一个过滤器并保留一个访问过的页面列表来实现这一点。一切都运行良好,除了在使用转发的应用程序中使用时,插件会记录一个页面的两个条目,因为Grails过滤器在每个请求上运行,即使该请求只是一个转发(即:内部重定向)。
由于这是一个插件(必须与应用程序无关),每当使用转发来检查转发是否已发生时,我都不能简单地设置一个flash变量。有没有办法确定过滤器中是否发生了转发?我正在探索请求变量中的不同值以及它们在正常请求和转发之间的区别,但事情可能会变得非常混乱。任何帮助都非常感谢。
P.S。到目前为止我注意到的主要区别是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'