grails:随机自动id';s

grails:随机自动id';s,grails,key,auto-generate,Grails,Key,Auto Generate,在rails的默认安装中,当您保存第一个域对象时,它会给出一个奇特的随机id,如785787634或其他什么。Grails给出了1 在grails中,使自动生成的id难以猜测且不太可能相交的首选方法是什么?grails允许您自定义id生成器。看 在您的情况下,您可以考虑“UUID”或“GUID”< P>一种不同的方式是使用提供的缺省ID,但是当您需要对该项进行公共(非安全)访问时,使用UUID添加专用列。 我认为这将非常有效: class Widget { String uuid

在rails的默认安装中,当您保存第一个域对象时,它会给出一个奇特的随机id,如
785787634
或其他什么。Grails给出了
1


在grails中,使自动生成的id难以猜测且不太可能相交的首选方法是什么?

grails允许您自定义id生成器。看


在您的情况下,您可以考虑“UUID”或“GUID”

< P>一种不同的方式是使用提供的缺省ID,但是当您需要对该项进行公共(非安全)访问时,使用UUID添加专用列。 我认为这将非常有效:

class Widget {
    String uuid

    static constraints = {
        uuid unique: true
    }

    def beforeInsert() {
        // optionally, replace the dashes by adding .replaceAll('-','')
        uuid = UUID.randomUUID().toString()
    }
}
然后您可以使用这样的控制器:

// url: app/public/widget/48b5451a-0d21-4a36-bcc0-88b129852f1b

PublicController {
    def widget() {
        Widget w = Widget.findByUuid(params.id)
        ...
    }
}
这是自动索引的,所以不会太慢,UUID只在公开查找小部件时使用。如果有人登录,那么您可以执行安全检查,只需使用
app/widget/edit/1
或类似工具即可


我无论如何都不会相信“随机数”是安全的。即使数字不是连续的,猜测数字也是有效的。相对而言,猜测UUID几乎是不可能的。但是,如果您有登录帐户,则授权检查是目前为止最好的方法。

顺序自动生成ID的一个优点是,它降低了插入聚集索引的复杂性。将随机id称为“更好”是主观的。记住,你可以检查一下:我听说UUID会影响性能。在你选择它之前,你可能想做一个benchmark@mootinator“更好是主观的”这一点很好,我实际上不太关心安全性,因为我是一个十字路口。也许我走错了路。。我将尝试进一步隔离我遇到的问题,并发布一个新问题。