如果index大于255,则数据绑定不起作用

MKB*_*MKB 4 data-binding grails gsp command-objects grails-2.3

我正在使用一个应用程序grails version 2.3.9.在那里,我正在使用复选框呈现列表.用户可以选择任何行并提交页面.在服务器端,我使用命令对象来绑定数据.

我的命令对象 -

@Validateable
class MyCO {

    List<MyDoamin> myDomains = ListUtils.lazyList([], FactoryUtils.instantiateFactory(MyDoamin))
    ...

    static constraints = {
        myDomains nullable: false, validator: { val, obj ->
            if (val.size() < 1) {
                return "error.code"
            }
        }
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

视图 -

<g:each in="${myDomains}" var="myDomain" status="idx">
  <tr>
    <td>
      <input type="checkbox" name="myDomains[${idx}].id" value="${myDomain.id}" checked>
    </td>
    ...
  </tr>
</g:each>
Run Code Online (Sandbox Code Playgroud)

行动 -

def myAction(MyCO myCO) {
    if (myCO.validate()) {
        ...
    } else {
        log.error "-----INVALID-----"
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

这段代码工作正常.但是,如果用户选择其索引(idx)值大于255的行,则数据绑定不起作用.

请求参数 -

[myDomains [256] .id:66,myDomains [256]:[id:66],action:myAction,controller:myController]

我也尝试过

List<MyDoamin> myDomains
Run Code Online (Sandbox Code Playgroud)

List<MyDoamin> myDomains = [].withDefault { new Client() }
Run Code Online (Sandbox Code Playgroud)

在命令对象中,但结果相同,没有数据绑定.

我在这里做错了吗?我怎样才能解决这个问题?

Gra*_*her 5

默认情况下,集合自动增长限制设置为255:

https://github.com/grails/grails-core/blob/2.3.x/grails-plugin-databinding/src/main/groovy/org/codehaus/groovy/grails/plugins/databinding/DataBindingGrailsPlugin.groovy#L58

您可以通过将grails.databinding.autoGrowCollectionLimitin 设置Config.groovy为其他内容来更改此设置.

这种限制的原因是攻击者可以通过在数据绑定期间创建数千个对象来制造拒绝服务攻击,从而耗尽所有内存,这不是您想要的.