`
Jcat
  • 浏览: 49800 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Grails中为静态资源设置过滤器

阅读更多
今天做了个上传文件功能的雏形,发现上传后的文件(URI)不受Grails的过滤器控制,用户不登陆也可以访问到这些资源,这自然就不安全咯。

开始还以为是uri匹配的不对,后来查阅文档才明白,Grails的过滤器只对controller有效,对静态资源无能为力(包括网站的各种图标)
引用
Static resources aren't served by a controller, so Grails filters (which are wrappers for Spring controller interceptors) won't fire for requests for them.


解决办法,回归原本
1. 在src/java或src/groovy下创建一个过滤器,可以让它什么都不做
package myoa

import javax.servlet.*

class StaticFilter implements Filter {
    @Override
    void init(FilterConfig filterConfig) {
        println('StaticFilter init')
    }

    @Override
    void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) {
        println('StaticFilter doFilter')
    }

    @Override
    void destroy() {
        println('StaticFilter destroy')
    }
}

2. 创建配置文件
grails install-templates
编辑之
src/templates/war/web.xml

   <filter>
        <filter-name>staticFilters</filter-name>
        <filter-class>myoa.StaticFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>staticFilters</filter-name>
        <url-pattern>/file-store/*</url-pattern>
    </filter-mapping>

这样就做好了一个最简单的静态资源过滤器,uri在file-store文件夹的所有资源将被禁止访问。

3. 再进一步,可以完善这个doFilter功能,其实这就是Grails的过滤器的本质。 这里倒是有了个小心得,越本质的东西,看起来复杂,理解起来容易(好比是Servlet);封装过的东西,用起来简单,理解起来困难(好比是Grails)。所以要两者兼顾,先实用主义,把东西先做出来,然后慢慢体会最本质的东西,好歹现在都是open source的,看源码比看文档来得更透彻。
void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) {
        println('StaticFilter doFilter')

        HttpServletRequest request = (HttpServletRequest) servletRequest
        HttpServletResponse response = (HttpServletResponse) servletResponse
        HttpSession session = request.getSession(false) //若存在会话则返回该会话,否则返回NULL

        if (session?.getAttribute('loginUser')) {
            chain.doFilter(servletRequest, servletResponse);//放行。让其走到下个链或目标资源中
        } else {
            println('please login')
            response.sendRedirect(request.getContextPath() + "/user/login")
        }
    }

====有待研究====
staticFilter无效
<g:link url="${resource(dir: 'download', file: 'expense-this-month.xls')}">
http://localhost:8080/myoa/static/download/expense-multi-month.xls

staticFilter有效
<g:link uri='/download/expense-this-month.xls'>
http://localhost:8080/myoa/download/expense-multi-month.xls
2
2
分享到:
评论
1 楼 px96004 2013-08-22  
原来grails 下的过滤器是如此

相关推荐

    Grails 的过滤器(Grails Filters)

    **Grails 框架与过滤器(Grails Filters)详解** Grails 是一个基于 Groovy 语言的、用于构建动态Web应用的开源框架。它提供了丰富的特性,简化了Java平台上的开发工作,如自动代码生成、元编程支持以及灵活的数据...

    grails 3.3.2 资源下载

    Grails 是一个基于Groovy语言的开源Web应用框架,它构建于Java平台之上,旨在提高开发效率,简化复杂的Java开发流程。Grails 3.3.2是该框架的一个稳定版本,提供了许多改进和新特性,以提升开发者的体验和应用性能。...

    Grails Grails Grails

    Grails的控制器通过拦截器链进行扩展,可以添加自定义的行为和过滤逻辑。 **Grails 的核心特性** 1. **自动化配置和约定优于配置**:Grails 提供了许多默认配置,例如数据库连接、URL映射等,开发者只需按照约定...

    Grails权威指南 Grails权威指南

    6. **Grails构建工具**:Grails的构建系统自动化处理许多任务,如依赖管理、资源处理、测试执行等,使得开发流程更加顺畅。 7. **RESTful服务**:Grails支持创建RESTful API,这在当今的微服务架构中尤为重要。...

    grails-2.3.6.zip

    7. **Grails Filters**: 过滤器(Filters)是Grails中用于在请求处理前后执行代码的机制,常用于登录验证、日志记录等场景。开发者可以轻松地定义全局或特定控制器的过滤器。 8. ** Geb和Spock 测试**: Geb是一个...

    Eclipse下搭建Grails项目

    - 由于Grails项目涉及GSP(Groovy Server Pages)文件,推荐使用包含JSP编辑器的Eclipse JEE版本。如果你对JSP语法熟悉且内存有限,也可选择Classic版本。 - 安装Eclipse 3.4.0 JEE版本或其他支持JSP编辑的最新...

    grails学习

    - `'org.codehaus.groovy.grails.web.mapping.filter'`:URL 映射过滤器 - `'org.codehaus.groovy.grails.web.mapping'`:URL 映射 - `'org.codehaus.groovy.grails.commons'`:核心/类加载 - `'org.codehaus....

    Grails Jquery 集成代码

    Grails使用Resource Management机制来处理静态资源,如CSS、JavaScript和图片。确保在`grails-app/conf/Config.groovy`文件中配置资源管理,使JQuery能够被正确加载。 ```groovy grails.assets.enabled = true ...

    grails-用户手册

    Grails支持多语言环境,通过`messages.properties` 文件实现国际化,可以根据用户浏览器设置自动选择对应的语言版本。 总结来说,《Grails用户手册》涵盖了从项目创建到部署运行的全过程,包括Grails的基础概念、...

    the definitive guide to grails 2

    《Grails 2 的终极指南》是一本深入探讨Grails框架精髓的专业书籍,该书以英文撰写,旨在为读者提供全面、深入的Grails框架学习资料。Grails框架基于Groovy语言,是一种高度动态、敏捷的Java应用开发框架,它简化了...

    eclipse开发grails插件

    5. **开发与调试**:在Eclipse中,你可以直接编辑Grails的源代码,使用内置的Groovy编辑器进行语法高亮和代码提示。通过右键点击项目,选择"Run As" -&gt; "Grails Command"可以运行Grails的命令,例如"run-app"来启动...

    grails快速开发web

    - **成功案例**:展示了 Grails 在实际项目中的应用效果,如使用 Grails 开发的富文本编辑器等。 - **性能对比**:通过测试证明 Grails 的性能远超过 Ruby on Rails。 #### 七、未来展望 - **Groovy 与 Java 7**:...

    grails中文文档

    例如,`grails create-app` 用于创建新的 Grails 应用,`grails run-app` 用于启动应用,`grails generate-controller` 可以自动生成控制器代码。这些命令大大提高了开发效率,让开发者能专注于业务逻辑而非基础架构...

    第一个grails程序

    2. **src/main/resources**:资源文件存储在这里,例如配置文件、静态资源或国际化消息。 3. **grails-app/controllers**:控制器文件夹,包含处理HTTP请求的类,负责视图的渲染和业务逻辑的调用。 4. **grails-app/...

    Grails入门指南中文第二版.pdf

    8. **Grails过滤器(Filters)**:过滤器在应用程序中的应用,如何在特定的HTTP请求或响应之前/之后执行代码。 9. **Grails视图(Views)**:使用GSP(Groovy Server Pages)进行页面渲染,理解标签库(Tag Libs)...

    Grails学习记录

    这个项目可能包含了Grails的源代码、配置文件、资源文件等,通过分析这个项目的结构和代码,我们可以更深入地理解Grails的实际应用。 详细知识点: 1. **Groovy语言基础**:Grails是基于Groovy语言的,因此了解...

    Grails1.1中文文档

    8. **国际化(i18n)**:Grails支持多语言环境,文档将介绍如何设置和使用国际化资源文件。 9. **插件系统**:Grails的插件系统极大地扩展了其功能,文档会讲解如何安装、使用及开发插件。 10. **测试**:文档会...

    grails中文入门简介

    Grails的URL映射系统使得可以灵活地将请求映射到控制器、视图和操作。而WebFlow则提供了一种高级的Web导航流程。 验证是Web开发中不可或缺的一部分,Grails通过声明约束和验证约束来实现。它支持客户端验证,使得...

Global site tag (gtag.js) - Google Analytics