我正在将老式 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/