# Grails 1.1 安全性 - 编码和解码对象

**URL:** <https://www.isharkfly.com/t/grails-1-1/6803>\
**Category:** 程序语言\
**Created:** [November 11, 2012, 3:47am UTC](https://www.isharkfly.com/t/grails-1-1/6803 "2012-11-11T03:47:21Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![honeymoose](https://www.isharkfly.com/user_avatar/www.isharkfly.com/honeymoose/32/20796_2.png) [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Post date:** [November 11, 2012, 3:47am UTC](https://www.isharkfly.com/t/grails-1-1/6803/1 "2012-11-11T03:47:21Z")

</div>

Grails支持动态编码/解码方法概念。Grails捆绑了一些标准的编解码器，Grails也为开发人员提供了一个贡献自己编解码器的简单机制，这些编解码器在运行时可以被识别。

编解码器类

一个Grails编解码器是个包含一个编码闭包，一个解码闭包或两者皆有。当一个Grails应用启用了，Grails框架会动态从grails-app/utils/目录加载编解码器。

Grails框架将在 grails-app/utils/目录下查找以Codec结尾命名的类名。例如Grails捆绑的其中一个标准编解码器就是HTMLCodec。

假如一个编解码器包含一个encode属性，该属性被赋予一个代码块，Grails会创建一个动态的encode方法，并把该方法添加到Object类，方法名表示了定义encode闭包的编解码器。

例如，HTMLCodec类定义了一个编码器代码块，因此Grails会把该闭包与名为encodeAsHTML的Object类相关联。

HTMLCodec类和URLCodec类也定义了解码块，所以Grails会把这些闭包与decodeHTML和decodeURL相关联的。

动态编解码器能在Grails应用的任何一个地方执行。

例如，考虑一下这种情况，一个报告文件含有一个叫description的属性，该属性包含了需要被转义显示在HTML文档的特殊字符。

GSP文档里，一种处理方法就是用如下的动态编码器编码description属性：`${report.description.encodeAsHTML()}`执行解码使用value.decodeHTML()语句。
