Grails过滤静态资源?

时间:2011-04-14 18:54:57

标签: grails filter

我正在将旧式Java过滤器转换为Grails过滤器。 (过滤器正在记录对特定静态图像的访问。)

问题是,我无法解决它! Grails是否支持静态资源前的过滤器?

class EmailImageFilters {
    def filters = {
        emailFilter(uri: '/images/**') {
            log.info "email filter ${new Date()}"
            before = {
                return true;
            }
        }
    } 
}

我正在使用UIPerformance插件,但它在开发模式下没有打开。

Grails 1.3.5

我可以在以下情况下解雇:

emailFilter(controller: '*', action: '*') {

但我需要通过静态资源;例如/图像

连连呢?

1 个答案:

答案 0 :(得分:10)

静态资源不是由控制器提供的,因此Grails过滤器(它是Spring控制器拦截器的包装器)不会为它们的请求触发。您需要在web.xml中注册servlet过滤器以处理静态资源。

在src / java或src / groovy中创建一个实现javax.servlet.Filter的类,然后运行grails install-templates并编辑src/templates/war/web.xml进行注册,类似

<filter>
   <filter-name>myFilter</filter-name>
   <filter-class>com.mycompany.myapp.MyFilter</filter-class>
</filter>

<filter-mapping>
   <filter-name>myFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

如果您不希望为所有请求触发,请将url-pattern的值更改为更具体。