【问题标题】:How to make directory public on Grails?如何在 Grails 上公开目录?
【发布时间】:2011-04-05 17:29:21
【问题描述】:

我的 Grails 应用程序在文件夹中生成文件(例如“输出”)。 如何使该文件夹公开,以便通过以下 URL 公开输出文件:

http://localhost:8080/MyGrailsApp/output/myOutputFile1.xml
http://localhost:8080/MyGrailsApp/output/myOutputFile2.xml

干杯!

【问题讨论】:

    标签: grails directory public


    【解决方案1】:

    有两种方法可以做到这一点。首先是阅读您的应用程序服务器的文档,并在存储 xml 文件的任何目录上启用目录列表。如果您需要与应用程序服务器无关,第二个选项可能是创建一个使用 URL 映射自动加载的简单控制器并返回请求的文件。有关 grails 中 URL 映射的文档和示例,请参见 http://www.grails.org/URL+mapping

    【讨论】:

      【解决方案2】:

      这段代码并不完美,也没有经过测试,只是在这里输入,但它应该能让你朝着正确的方向前进

      创建一个名为 OutputController.groovy 的控制器

      def viewFile = {
      
          // add checks to ensure fileName parameter has no "/" or ".." to
          // prevent directory transversal
      
          def file = new File(OUTPUT_FILE_PATH + params?.fileName)
      
          if (file.exists()) {
              render(text: file.newInputStream().text, contentType: "text/plain",
                             encoding: "UTF-8")
          } else {
              render "FILE NOT FOUND: ${params?.fileName}"
          }
      }
      

      更新 url 映射文件

      mappings {
        "/output/$fileName?" {
            controller = "output"
            action = "viewFile"
        }
      }
      

      【讨论】:

      • 我担心这会导致目录遍历问题en.wikipedia.org/wiki/Directory_traversal
      • 我在这里写了“基本”代码来说明这一点......是的,需要对传入的参数进行一些验证,以确保不会发生类似的事情跨度>
      • 这正是我所需要的。谢谢!我可以明确地验证字符串以防止“../”技巧
      猜你喜欢
      • 2021-01-25
      • 2016-09-17
      • 1970-01-01
      • 2022-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多