当前位置: 首页 > 知识库问答 >
问题:

仅在产品中编码的Grails GSP表达式

淳于飞文
2023-03-14

我试图找出哪个配置导致了我在GrailsV4.0.6中看到的行为。

如果我有一个GSP表达式,例如${myMessage},并且myMessage包含html标记,例如

然而,如果我部署到生产模式,Grails将对html标记进行编码,因此它不会按预期呈现。我确信这是某个地方的配置,可能与应用程序中的编码或编解码器配置有关。yml,但我没有看到任何明确区分开发模式和生产模式的地方。

我还会注意到,我看到这种情况的时候都是在从我的自定义标签库渲染的模板中使用表达式的时候,比如这样的:

out << render(template:"bookTemplate",model:"[book: myBook]")

我的问题表达式位于\u bookTemplate中。普惠制。我不能说这是唯一发生这种情况的场景。


共有1个答案

计和顺
2023-03-14

https://docs.grails.org/4.0.6/guide/single.html#xssPrevention

默认情况下,Grails很安全,并在GSP中转义${}表达式中的所有内容。默认情况下,所有标准GSP标记都是安全的,可以转义任何相关的属性值。

那么,当您想阻止Grails转义某些内容时会发生什么呢?只要该内容是受信任的,就有将超文本标记语言放入数据库并按原样呈现的有效用例。在这种情况下,您可以告诉Grails内容是安全的,应该以原始方式呈现,即没有任何转义:

<代码>

您在这里看到的raw()方法可以从控制器、标记库和GSP页面获得。

之后:

GSP具有自动对GSP表达式进行HTML编码的能力,从Grails 2.3开始,这是默认配置。新创建的Grails应用程序的默认配置(位于application.yml中)如下所示:

 grails:
    views:
        gsp:
            encoding: UTF-8
            htmlcodec: xml # use xml escaping instead of HTML4 escaping
            codecs:
                expression: html # escapes values inside ${}
                scriptlets: html # escapes output from scriptlets in GSPs
                taglib: none # escapes output from taglibs
                staticparts: none # escapes output from static template parts

GSP具有几个编解码器,它在将页面写入响应时使用。编解码器在编解码器块中配置,如下所述:

expression - The expression codec is used to encode any code found within ${..} expressions. The default for newly created application is html encoding.

scriptlet - Used for output from GSP scriplets (<% %>, <%= %> blocks). The default for newly created applications is html encoding

taglib - Used to encode output from GSP tag libraries. The default is none for new applications, as typically it is the responsibility of the tag author to define the encoding of a given tag and by specifying none Grails remains backwards compatible with older tag libraries.

staticparts - Used to encode the raw markup output by a GSP page. The default is none.
 类似资料:
  • 我在任何地方都没看到有人问过这个问题,所以下面是: 我在我的Magento商店里有几个属性,但是为了让用户从过于杂乱的页面中解脱出来,我用标签把产品页面上不同类型的信息分开。第一个选项卡显示产品描述,它目前是一组HTML,基本上是通过显示易于理解的图标来镜像属性,图标下有属性值,第二个选项卡显示更深入的信息,属性是从DB调用的。 现在,当编辑或添加产品时,我基本上必须添加两次属性:一次作为实际的产

  • 12.4. 示例: 编码为S表达式 Display是一个用于显示结构化数据的调试工具,但是它并不能将任意的Go语言对象编码为通用消息然后用于进程间通信。 正如我们在4.5节中中看到的,Go语言的标准库支持了包括JSON、XML和ASN.1等多种编码格式。还有另一种依然被广泛使用的格式是S表达式格式,采用Lisp语言的语法。但是和其他编码格式不同的是,Go语言自带的标准库并不支持S表达式,主要是因为

  • 每次根据其他几个字段的内容保存产品时,我都希望更新产品在我的商店中的属性。 然而,我正在努力让我的属性正确出现。 最初,我试图使用以下功能根据这个问题的公认答案更新产品: 这将添加到了分类法的可用术语列表中,但在我检查产品属性时,它们不可见。 接下来,我尝试了上述问题中第二个答案的变体: 这也无法更新产品的属性。 在这一点上,我不知道下一步该尝试什么。使用操作似乎是有效的,因为这个术语确实被添加到

  • 3.4 产品列表 3.4.1 描述 通过调用该接口为指定订单号的订单明细 3.4.2 请求地址 地址:https://api.bokecs.com/recharge/productList?pageSize=10&pageNum=3 3.4.3 请求方式 GET 3.4.4 请求参数 1) 请求入参 元素名称 是否必须 元素描述 pageNum 否 默认为1 pageSize 否 默认10 2)

  • 当我在wordpress页面上显示一些产品时,我想显示一个简短的描述链接到一个相关的pdf(理想情况下使用pdf图标作为链接) 我已经设法通过使用以下代码来显示简短的描述-但是我如何在已经添加到产品中的元数据中添加一些东西(元数据:pdf_link)-它是一个. pdf文件的网址 添加动作(“购物”后加上“购物”后加上“购物”后加上“购物”后加上“购物”后加上“购物”后加上“购物”后加上“购物”后

  • 在WooCommerce中,我试图找到一种类似于方法或的方法,例如,设置产品类型,如简单或变化。 实际上,我使用的是对象如下: 如果用户选中“简单产品”或“可变产品”,我如何设置产品类型? 任何帮助都很感激。