如何从 grails 默认 gsp 编码中排除插件?

Posted

技术标签:

【中文标题】如何从 grails 默认 gsp 编码中排除插件?【英文标题】:How can I exclude a plugin from grails default gsp encoding? 【发布时间】:2014-09-07 06:06:54 【问题描述】:

我正在一个 grails 应用程序中工作,该应用程序对所有 gsp 页面使用 html 的默认编码:

grails 
    views 
        gsp 
            encoding = 'UTF-8'
            codecs 
              expression = 'html' 
              scriptlet = 'html'
              taglib = 'none' 
              staticparts = 'none' 
            
        
    

这很好,并且从绝大多数应用程序中消除了 XSS 漏洞,但是应用程序中的一些插件在 grails 变量中包含 HTML,这些变量在插件中的 GSP 上呈现。在不修改插件的情况下,我无法在我不想编码的变量周围添加 raw() 方法。

我查看了 grails 文档,可能只是找错地方了,但我找不到答案...

有没有办法从 gsp 编解码器中排除插件?甚至是特定的控制器/视图?

【问题讨论】:

也许下一个插件可能会有所帮助http://grails.org/plugin/plugin-config 【参考方案1】:

所以我终于有时间重新审视这一点并进行更多研究。最终偶然发现了 github 上的一个讨论(https://github.com/grails/grails-core/wiki/Default-Codecs)。

关于 Per Plugin 编码的部分内容如下:

" Grails 还具有控制基于每个插件使用的编解码器的能力。例如,如果您安装了一个名为 foo 的插件,那么将以下配置放在应用程序的 Config.groovy 中将仅禁用 foo 插件的编码

foo.grails.views.gsp.codecs.expression = "none"

"

在极少数情况下的旁注:

我遇到了配置文件中保留字的其他问题。我们使用了一个名为“custom-user-interface”的插件,并试图以同样的方式引用它”

custom-user-interface.grails.views.gsp.codecs.expression = "none"

编译失败,因为 grails 试图将“接口”视为有意义的东西。试图把它放在一个字符串中

'custom-user-interface'.grails.views.gsp.codecs.expression = "none"

编译也失败,出现错误“no property 'grails' for String”

最终我能够逃脱它并使用括号表示法成功地强制插件按照我想要的方式运行:

custom-'user-interface' 
   grails.views.gsp.codecs.expression = 'none'

【讨论】:

以上是关于如何从 grails 默认 gsp 编码中排除插件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 GSP 中使用 Spring Security Grails 插件获取 current_user

如何从 grails 视图文件夹中的 create.gsp 表单中隐藏几个字段?

如何从 gsp 调用 Grails 服务?

仅在生产环境中编码的 Grails GSP 表达式

Grails Spring Security 插件和 GSP 标签不起作用

是否可以从生产环境中排除 grails 插件?