grails - 在 Grails 中对属性进行 HTML 编码时如何正确验证域类?

标签 grails grails-2.0 grails-domain-class

我对表单输入字段使用 html 编码。我有一个创建新用户对象的表单,可以在其中插入新用户的名称。为了防止这个输入字段被脚本注入(inject),我做 编码作为HTML() 在下面列出的 save() 操作中。

问题:
1.输入的名称是:Schäfchen
2.在我下面的验证规则之后,这将被正确验证
3. html 编码将 ä 转换为\auml 会导致验证失败

如何实现正确验证 html 编码的名称?

给定以下 Grails 类:

class User {
  String name
  static constraints = {
    name blank: false, validator: { val, obj ->                     
                Pattern pattern = Pattern.compile("[a-zA-Z0-9äöüßÄÖÜ\\- ]+")
        pattern.matcher(val).matches()
    }
  }
}

在我的 UserController.groovy 中:
dev save() {
  def name = params?.name?.encodeAsHTML()
  def user = new User()
  user.name = name
  user.save()
}

最佳答案

您应该只在您的 GSP View 中使用 encodeAsHTML()。

见:http://grails.org/doc/latest/ref/Tags/each.html

<tbody>
 <g:each status="i" in="${itemList}" var="item">
  <!-- Alternate CSS classes for the rows. -->
  <tr class="${ (i % 2) == 0 ? 'a' : 'b'}">
   <td>${item.id?.encodeAsHTML()}</td>
   <td>${item.parentId?.encodeAsHTML()}</td>
   <td>${item.type?.encodeAsHTML()}</td>
   <td>${item.status?.encodeAsHTML()}</td>
 </tr>
 </g:each>
</tbody>

关于grails - 在 Grails 中对属性进行 HTML 编码时如何正确验证域类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17908955/

相关文章:

grails - 自定义包日志级别被忽略

grails - 数据截断 : Data too long for column grails GSP field

database - SQL查询数据库

tomcat - 一个 grails 应用程序有多个或多个域?

grails - 通过constrainedProperty访问Grails中的唯一约束

grails - 根据 hasman 关系中的最新记录搜索记录

testing - Grails 测试目录的相对路径

html - 如何在gsp中将列表显示为多列

java - Ehcache、Redis 和 Gemfire 哪种缓存适用于哪种场景?

grails - 为Grails中的域类生成XML模式