带有静态资源的 Grails 过滤器?

标签 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: '*') {

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

建议?

最佳答案

静态资源不由 Controller 提供服务,因此 Grails 过滤器(它们是 Spring Controller 拦截器的包装器)不会因对它们的请求而触发。您需要在 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 的值更改为更具体。

关于带有静态资源的 Grails 过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5668190/

相关文章:

grails - 在gsp页面中对数组元素进行分组显示

hibernate - 如何在Grails中使用自定义 validator 正确检查字段唯一性?

java - 部署 Grails 应用程序时出错 - 初学者

r - 将月份第一级的值保留在数据框中,同时将 R 中的其余值设置为零

javascript - 是否可以使用javascript中的filter方法用正则表达式取出一个单词?

jquery - 如果类列表包含类,则 dataTables 自定义过滤 <tr>

java - Grails:用 Hibernate 类替换 GORM

javascript - gridcomplete 函数始终运行?

python - 列表理解与过滤与删除

arrays - 根据搜索文本过滤核心数据项