Grails - 跨控制器代码,在每个请求上执行

Posted

技术标签:

【中文标题】Grails - 跨控制器代码,在每个请求上执行【英文标题】:Grails - cross controller code, execute on every request 【发布时间】:2011-07-22 06:21:04 【问题描述】:

有没有办法在调用任何控制器操作之前执行一些代码?

我需要根据 get 参数的值设置会话变量,而不考虑调用哪个控制器。

当然,一旦这个处理完成,请求需要按照正常的方式到达相应的控制器/动作。

谢谢

【问题讨论】:

【参考方案1】:

听起来你想使用filter。

例如grails-app/conf/MyFilter.groovy

class MyFilter 
    def filters = 
        extractSomething(controller: '*', action: '*') 
            before = 
                session.setAttribute('foo', params['paramName'])
            
        
    

【讨论】:

【参考方案2】:

如果与多个或所有控制器一起使用,过滤器会很好,但可能会变得昂贵。 你也可以试试拦截器:

def beforeInterceptor = 
       session.setAttribute('foo', params['paramName'])

http://www.grails.org/Controllers+-+Interceptors

【讨论】:

以上是关于Grails - 跨控制器代码,在每个请求上执行的主要内容,如果未能解决你的问题,请参考以下文章

在 grails 控制器中识别 ajax 请求或浏览器请求

Grails:防止在控制器的基类中重定向或转发后进一步执行代码

Grails/Hibernate:版本控制上的空指针异常

如何在grails应用程序中获取每个请求的内存使用情况

如何在 grails 中实现请求超时?

ajax请求在spring security中被拒绝,Grails