grails:随机自动id

时间:2012-02-15 17:37:42

标签: grails key auto-generate

在保存第一个域对象时,在默认安装rails时,它会提供像785787634之类的花哨的随机ID。 Grails给出了1

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

2 个答案:

答案 0 :(得分:5)

Grails允许您自定义id生成器。见http://grails.org/doc/latest/guide/GORM.html#identity

在你的情况下,你可以考虑'uuid'或'guid'

答案 1 :(得分:4)

执行此操作的另一种方法是使用提供的默认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几乎是不可能的。但是,如果您拥有登录帐户,则授权检查最好。