Grails过滤器:链接过滤器的任何方式?

问题描述 投票:0回答:3

有没有办法在grails应用程序中链接几个过滤器(如在Java过滤器中)?也许有春天的东西?

我写了几个过滤器,并希望让它们按顺序执行(顺序并不是特别重要)。这背后的原因?我需要编写大约20个,30个过滤器,并且不希望它们都在同一个文件中。

我已经读过关于Spring qazxsw poi但是无法弄清楚如何配置它来链接我的所有grails过滤器。

spring grails servlet-filters
3个回答
2
投票

我可能不会在这里理解核心问题,但简单的答案可能是“它们已被链接”。过滤器是根据您放入过滤器闭包的选择器执行的(例如myPreProcessorFilter(controller:'',action:''){})。将执行与您的控制器/操作匹配的所有选择器。我一直使用日志记录和性能测量过滤器。

这是一个例子。 logAction和measureMethodTime过滤器都将应用于所有控制器和操作(因为我将选择器保持打开状态)。

DelegatingFilterProxy

4
投票

从Grails 1.3.1开始,您可以使用“dependsOn”关键字链接过滤器:

import org.springframework.web.context.request.RequestContextHolder as RCH import com.x.y.* class PerformanceFilters { def filters = { logAction(controller:'*', action:'*'){ before = { log.debug("${controllerName}.${actionName}: entering; params=${params}") } } measureMethodTime(controller:'*', action:'*'){ before = { def session = RCH.currentRequestAttributes().getSession(false) if (session) { Q.startTimer("${session.id}-${controllerName}-${actionName}", "method.${controllerName}.${actionName}") } } afterView = { def session = RCH.currentRequestAttributes().getSession(false) if (session) { Q.stopTimer("${session.id}-${controllerName}-${actionName}", "method.${controllerName}.${actionName}") } } } } }

def dependsOn = [MyOtherFilters.class]


© www.soinside.com 2019 - 2024. All rights reserved.